21
Universidade Estadual de Campinas Unicamp Faculdade de Engenharia Elétrica e de Computação Feec PROJETO IA369E VISUALIZAÇÃO VOLUMÉTRICA INTERATIVA Rodrigo Mologni Gonçalves dos Santos Rafael Guimarães Ramos Tópicos em Engenharia da Computação (IA369E) Docente: Prof.ª Wu, Shin-Ting 2º semestre de 2011

Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

Universidade Estadual de Campinas – Unicamp

Faculdade de Engenharia Elétrica e de Computação – Feec

PROJETO IA369EVISUALIZAÇÃO VOLUMÉTRICA INTERATIVA

Rodrigo Mologni Gonçalves dos Santos

Rafael Guimarães Ramos

Tópicos em Engenharia da Computação (IA369E)

Docente: Prof.ª Wu, Shin-Ting

2º semestre de 2011

Page 2: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

R. M. G. Santos | R. G. Ramos

PROPOSTA DE TRABALHO

Implementar as seguintes técnicas de visualização de dados volumétricos:

1. Algoritmo de voxelização baseado em buffer de profundidade;

2. Renderização volumétrica baseada em textura 2D: fatias alinhadas ao eixo;

3. Renderização volumétrica baseada em textura 3D: fatias alinhadas ao eixo;

4. Esquemas de composição e correção de opacidade;

5. Tabela de cores: função de transferência pré-interpolativa;

6. Iluminação volumétrica local: iluminação Lambertiana em tempo de execução;

7. Recorte volumétrico baseado em superfícies;

8. Lançamento de raio por espaçamento constante para grades uniformes;

9. Renderização estereoscópica 3D em OpenGL.

Page 3: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

AMBIENTE DE DESENVOLVIMENTO

O ambiente de desenvolvimento é composto pelas seguintes ferramentas:

• Eclipse IDE 3.7.1;

• PyDev 2.2.4;

• Python 2.6.6;

• PyQt 4.8.6;

• PyOpenGL 3.0.1;

• PyQGLViewer 0.9.1;

• NumPy 1.6.1.

R. M. G. Santos | R. G. Ramos

Page 4: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Algoritmo de Voxelização Baseado em Buffer de Profundidade

Algoritmo de Karabassi et al. (1999) para

voxelização de objeto geométrico 3D a

partir de 6 buffers de profundidade

R. M. G. Santos | R. G. Ramos

Page 5: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Algoritmo de Voxelização Baseado em Buffer de Profundidade

R. M. G. Santos | R. G. Ramos

Page 6: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Renderização Volumétrica Baseada em Textura 3D: Fatias Alinhadas ao Eixo

• Volume composto de fatias texturizadas (texturas 3D);

• Proxy geometry: quadrados, alinhado aos eixos x, y e z;

• Planos chaveados de acordo com o vetor de visualização.

R. M. G. Santos | R. G. Ramos

Page 7: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Renderização Volumétrica Baseada em Textura 3D: Fatias Alinhadas ao Eixo

Vantagem

• Uma única textura para todo o

volume;

• Consome menos memória de CPU;

• Interpolação trilinear.

Desvantagem

• Não suportada em placas mais antigas;

• Consome mais memória na GPU.

R. M. G. Santos | R. G. Ramos

Page 8: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Renderização Volumétrica Baseada em Textura 2D: Fatias Alinhadas ao Eixo

Uma alternativa para placas gráficas que não suportam texturas 3D ou suportam apenas

texturas 3D de dimensões reduzidas.

1 textura 3D ↔ (dx + dy + dz) texturas 2D

R. M. G. Santos | R. G. Ramos

Page 9: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Renderização Volumétrica Baseada em Textura 2D: Fatias Alinhadas ao Eixo

Vantagem

• A visualização é igual ao da

Renderização Volumétrica Baseada em

Textura 3D;

• Pode ser visualizado em placas gráficas

mais simples.

Desvantagem

• Ocupa 3X o tamanho de uma única

textura 3D.

R. M. G. Santos | R. G. Ramos

Page 10: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Esquemas de Composição e Correção de Opacidade

Composição dita a maneira como os voxels são acumulados...

Composição back-to-front:glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) cores associadasglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) cores não-associadas

Composição front-to-back:glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ONE) cores associadas ou não

Cores não-associadas: multiplicar RGB por alpha no fragment shader

Projeção de intensidade máxima:glBlendEquation(GL_MAX)glBlendFunc(GL_SRC_COLOR, GL_DST_COLOR)

Cuidado! Inicializar corretamente alpha buffer e depth test

R. M. G. Santos | R. G. Ramos

Page 11: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Esquemas de Composição e Correção de Opacidade

back-to-front associada back-to-front não-associada

front-to-back associada front-to-back não-associada

R. M. G. Santos | R. G. Ramos

Page 12: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Tabela de Cores: Função de Transferência Pós-Interpolativa

Função é aplicada sobre amostras interpoladas

R. M. G. Santos | R. G. Ramos

Page 13: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Tabela de Cores: Função de Transferência Pós-Interpolativa

Importante: atribuir corretamente as unidades de textura da GPU...

glUseProgramObjectARB(self.progObj)glActiveTextureARB(GL_TEXTURE0_ARB)glUniform1iARB(glGetUniformLocationARB(self.progObj, "volume"), 0)glActiveTextureARB(GL_TEXTURE1_ARB)glUniform1iARB(glGetUniformLocationARB(self.progObj, "colors"), 1)

uniform sampler3D volume;uniform sampler1D colors;void main() {

float index = texture3D(volume, gl_TexCoord[0].xyz).a;vec4 result = texture1D(colors, index);gl_FragColor = result;

}

Aplicando a função de transferência no fragment shader...

R. M. G. Santos | R. G. Ramos

Page 14: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Iluminação Volumétrica Local: Iluminação Lambertiana em Tempo de Execução

Aproximação diminui acesso a texturas:

Gradientes calculados on-the-fly(fragment shader)

R. M. G. Santos | R. G. Ramos

Page 15: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Iluminação Volumétrica Local: Iluminação Lambertiana em Tempo de Execução

#define DELTA 0.01#define THRESHOLD 0.01uniform vec3 lightPosition;uniform vec3 lightColor;uniform vec3 Kd;uniform sampler3D data3d;uniform sampler1D transf;void main() {

float sample = texture3D(data3d, gl_TexCoord[0].xyz).r;vec4 result = texture1D(transf, sample);if (result.a > THRESHOLD) {

vec3 L = normalize(gl_TexCoord[1].xyz - lightPosition);float sampleL = texture3D(data3d, gl_TexCoord[0].xyz + DELTA * L).x;result.rgb += Kd * lightColor * (sampleL – sample);

}gl_FragColor = vec4(result.r * result.a, result.g * result.a,result.b * result.a, result.a);

}

R. M. G. Santos | R. G. Ramos

Page 16: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

def draw(self):glPushMatrix()glTranslatef(self.origin.x, self.origin.y, self.origin.z)glClipPlane(GL_CLIP_PLANE0, (self.normal.x, self.normal.y, self.normal.z))glPopMatrix()self.drawScene()

def drawScene(self):glEnable(GL_CLIP_PLANE0)self.drawTextureImage3D()glDisable(GL_CLIP_PLANE0)

TUTORIAIS

Recorte Volumétrico Baseado em Superfícies

A própria OpenGL dispõe de um método para aplicar recorte a partir da especificação de

um plano no espaço.

a(x – x0) + b(y – y0) + c(z – z0) = 0

R. M. G. Santos | R. G. Ramos

Page 17: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Recorte Volumétrico Baseado em Superfícies

R. M. G. Santos | R. G. Ramos

Page 18: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Lançamento de Raio por Espaçamento Constante em GPU para Grades Uniformes

• Resultado semelhante a técnica por fatias, porém mais lento• Algoritmo implementado difere do mostrado no livro

R. M. G. Santos | R. G. Ramos

Page 19: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Lançamento de Raio por Espaçamento Constante em GPU para Grades Uniformes

vec3 volExtentMin = vec3(0, 0, 0); vec3 volExtentMax = vec3(1, 1, 1);

for(int i = 0; i < 300; i++) { value = texture3D(volume, position); scalar = value.r;vec4 source = texture1D(colors, scalar); destination.rgb += (1 - destination.a) * source.a * source.rgb; destination.a += (1 - destination.a) * source.a; position = position + direction * stepsize; vec3 temp1 = sign(position - volExtentMin); vec3 temp2 = sign(volExtentMax - position); float inside = dot(temp1, temp2);

}

R. M. G. Santos | R. G. Ramos

Page 20: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

def __init__(self):glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_STEREO)

def paintGL(self):glDrawBuffer(GL_BACK_LEFT)glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)glPushMatrix()glMatrixMode(GL_MODELVIEW)gluLookAt(-.25, 0, 3, 0, 0, 0, 0, 1, 0)self.drawScene()glPopMatrix()

glDrawBuffer(GL_BACK_RIGHT)glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)glPushMatrix()glMatrixMode(GL_MODELVIEW)gluLookAt(.25, 0, 3, 0, 0, 0, 0, 1, 0)self.drawScene()glPopMatrix()

TUTORIAIS

Renderização Estereoscópica 3D em OpenGL

R. M. G. Santos | R. G. Ramos

Page 21: Universidade Estadual de Campinas Unicamp Faculdade de ... · Esquemas de Composição e Correção de Opacidade back-to-front associada back-to-front não-associada front-to-back

PROJETO IA369E

TUTORIAIS

Renderização Estereoscópica 3D em OpenGL

A renderização estereoscópica funcionou,

porém o resultado não foi o esperado.

R. M. G. Santos | R. G. Ramos