Sistemas Gr´aficos
Sistemas h´ıbridos, multi-processados
CPU GPU
RAM VRAM
Dispositivo de saída Dispositivos
de entrada
W. Celes Sistemas Gr´aficos 3
Fluxo de Dados e Opera¸c˜oes
W. Celes Sistemas Gr´aficos 4
Arquitetura do Pipeline Gr´afico
N´ıveis de est´agios:
I
Est´agios conceituais
I
Est´agios funcionais
I Est´agios de implementa¸c˜ao
Est´agios conceituais:
Aplicação Geometria Rasterização
sw hw
Operações por vértice
Operações por fragmento
W. Celes Sistemas Gr´aficos 7
Representa¸c˜ao Geom´etrica de Objetos
Objeto Superfícies Polígonos
W. Celes Representa¸c˜ao Geom´etrica 2
Representa¸c˜ao Geom´etrica
Primitivas gr´aficas Ponto
Linha Triˆangulo
Descri¸c˜ao baseada nos v´ertices
W. Celes Representa¸c˜ao Geom´etrica 3
Representa¸c˜ao de Malhas de Triˆangulos
Tabela de incidˆencia
v
0x
0y
0z
0v
1x
1y
1z
1. . .
f
0v
iv
jv
kf
1v
iv
jv
k. . .
Compartilha v´ertices Representa¸c˜ao compacta Suficiente para renderiza¸c˜ao
Mas n˜ao ´e uma representa¸c˜ao completa (e.g., n˜ao representa aretas)
W. Celes Representa¸c˜ao Geom´etrica 5
Caracteriza¸c˜ao da Geometria
Atributos de v´ertices Coordenada (x, y, z)
Cor (r, g , b) ou Normal (n
x, n
y, n
z) Coordenada de textura (s , t) Atributos de faces
Conven¸c˜ao da ordem de incidˆencia
Clockwise (CW) ou Counterclockwise (CCW)
Normal dada em acordˆanciaQualquer lado pode ser vis´ıvel e iluminado
Modo de desenho
Preenchimento (FILL), linha (LINE), ponto (POINT) Atributos de pontos e linhas
Tamanho ou espessura
W. Celes Representa¸c˜ao Geom´etrica 7
Tipos de primitivas
GL_LINES 0
1
2 3 5
4
GL_LINE_STRIP 0
1
2 3
GL_LINE_LOOP
0 1
2 3
GL_POLYGON (convexo)
0 4
3 2 1
GL_QUADS
0 3
1 2
4 7
5 6
GL_QUAD_STRIP 0
1 3
2 4
5 GL_TRIANGLES
0 1
2
3 4
5
GL_TRIANGLE_STRIP 1
0 2
3
4 5
GL_TRIANGLE_FAN 0
1
2 3
4 GL_POINTS
0 1
2
W. Celes Representa¸c˜ao Geom´etrica 10
API com vetores
Coordenadas e atributos definidas em vetores no cliente Especifica¸c˜ao do vetor de coordenada
glVertexPointer(size, type, stride, pointer);
Exemplo:
struct MyVertex { float x, y, z;
float nx, ny, nz;
}; ...
MyVertex p[N];
...
glVertexPointer(3, GL FLOAT, sizeof(MyVertex), p);
Ativa¸c˜ao
glEnableClientState(GL VERTEX ARRAY);
...
glDisableClientState(GL VERTEX ARRAY);
API an´aloga para atributos (normal, cor, etc.) Pode ser intercalados (
glInterleavedArrays)
W. Celes Representa¸c˜ao Geom´etrica 15
Principais fun¸c˜oes de desenho
Desenho de primitivas com incidˆencia
glDrawElements (mode, count, type, indices);
mode
: tipo de primitiva
count
: n´ umero de v´ertices
type
: tipo dos ´ındices (deve ser unsigned)
indices
: ponteiro para vetor de ´ındices
Desenho de primitivas com incidˆencia sequencial
glDrawArrays (mode, first, count);
first
: ´ındice inicial do vetor
W. Celes Representa¸c˜ao Geom´etrica 16
Desenho de um grid
0 1 2 . . . nx
i
0 1 2 . . . ny
j
int Index (int i, int j) { return i + j⇥(m nx+1);
}
...
// fill coord
for (int j=0; j<=m ny; j++) { for (int i=0; i<=m nx; i++) {
int k = Index(i, j);
m coord[3⇥k] = (float)i / m nx;
m coord[3⇥k+1] = (float)j / m ny;
m coord[3⇥k+2] = 0.0f;
}
}// fill incidence as triangles int k = 0;
for (int j=0; j<ny; j++) { for (int i=0; i<nx; i++) {
m ind[k++] = Index(i, j);
m ind[k++] = Index(i+1, j+1);
m ind[k++] = Index(i, j+1);
m ind[k++] = Index(i, j);
m ind[k++] = Index(i+1, j);
m ind[k++] = Index(i+1, j+1);
} }
W. Celes Representa¸c˜ao Geom´etrica 17
Desenho de uma esfera
Coordenadas esf´ericas:
x = r cos ⇥ sin ⌅ y = r cos ⌅ z = r sin ⇥ sin ⌅
com:
⇥ ⇥ [0, 2⇤]
⌅ ⇥ [0, ⇤]
Considera¸c˜oes
Usar sempre geometria de r = 1.0 E aplicar escala para ajustar tamanho
Vetor de coordenadas e normais podem ser os mesmos
W. Celes Representa¸c˜ao Geom´etrica 18
Transforma¸c˜oes no pipeline
Geometria Rasterização Aplicação
Transformação Modelagem e Visualização
Iluminação Projeção Clipping
Rasterização Mapeamento de
Textura Combinação Fog/Blend Teste !,s,z
Frame Buffer Mapeamento
de Tela
Aplicação
operações por vértice
operações por pixel
W. Celes Espa¸cos de Coordenadas e Transforma¸c˜oes 2
Espa¸cos de coordenadas
x
z x
z x
z
Mm
transf. de modelagem
Mv
transf. de visualização
x z
x z
Mv
transf. de projeção
Ms
transf. de mapeamento (-1,-1)
(1, 1) (x0, 0)
(x0+w, 1)
Espaço do objeto (local)
Espaço do mundo (global)
Espaço do olho (camera)
Espaço pós-projeção (clip)
Espaço de tela (janela)
W. Celes Espa¸cos de Coordenadas e Transforma¸c˜oes 3
Proje¸c˜ao perspectiva (cˆonica)
Volume de vis˜ao definido por uma pirˆamide truncada
I
Linhas paralelas
I
Preservam-se paralelas se paralelas ao plano de proje¸c˜ao
I
Caso contr´ario, convergem para um ponto de fuga
I
Pontos colineares preservam-se colineares
I
Transforma¸c˜ao n˜ao linear ao longo da profundidade
I
Parˆametros: x
min, x
max, y
min, y
max, z
near, z
farI
z
near, z
far: distˆancia `a origem (devem ser positivas)
(-1,-1,-1) ( 1, 1, 1) (xmin,ymin)
znear
zfar (xmax,ymax)
P
Pz = -1 z = 1
W. Celes Espa¸cos de Coordenadas e Transforma¸c˜oes 25
Proje¸c˜ao perspectiva (cˆonica)
Transforma¸c˜ao do espa¸co
P
Px
z
(f+n)/(f-n)
f
x
z 1 -1
W. Celes Espa¸cos de Coordenadas e Transforma¸c˜oes 26
Proje¸c˜ao perspectiva (cˆonica)
N˜ao linearidade ao longo da profundidade
(far-near = 100) 0.0
1.0
-1.0
0 dist – near 100
z
winn=50 (n/f=0.5) n=10 (n/f=0.1) n=5 (n/f=0.05) n=1 (n/f=0.01)
W. Celes Espa¸cos de Coordenadas e Transforma¸c˜oes 27
Migra¸c˜ao entre espa¸cos
Migra¸c˜ao de v´ ertices:
v M
mvp! v
0Object space Clip space
v M
mvp1v
0Migra¸c˜ao de planos:
n M
mvpT! n
0Object space Clip space
n M
Tmvpn
0W. Celes Espa¸cos de Coordenadas e Transforma¸c˜oes 36
Ilumina¸c˜ao e Shading
Ilumina¸c˜ao
I
Intera¸c˜ao entre luz e materiais, produzindo uma cor
Shading (“sombreamento”)
I
Uso do c´alculo de ilumina¸c˜ao para renderizar primitivas
I
Flat (constant) shading: c´alculo de ilumina¸c˜ao por primitiva
I
Gouraud shading: c´alculo de ilumina¸c˜ao por v´ertice
I
Phong shading: c´alculo de ilumina¸c˜ao por pixel
Imagem deIntergraph Computer Systems
W. Celes Ilumina¸c˜ao 2
Modelo de ilumina¸c˜ao local
Intera¸c˜ao luz-mat´eria modelada por componentes
I
Componente especular
I
Modela raios refletidos diretamente (cor do brilho)
I
Componente difusa
I
Modela raios refletidos ap´os itera¸c˜ao com mat´eria (cor fosca)
I
Componente ambiente
I
Simula contribui¸c˜ao global
I
Componente emissivo
I
Simula materiais de fontes de luz
W. Celes Ilumina¸c˜ao 6
Componente difusa
Lei de Lambert para material fosco
n l
ϕ
i
dif= cos = n · l
onde n e l s˜ao vetores unit´arios Se >
⇡2) i
dif= 0
i
dif= max(n · l, 0)
Interpreta¸c˜ao geom´etrica
W. Celes Ilumina¸c˜ao 12
Componente especular
Modelo de ilumina¸c˜ao de Phong
n l
ϕ ϕ
r v
ϴ n
l r
-l
i
spec= (cos ✓)
mshi= (r · v)
mshionde: r = 2(n · l)n l
Dire¸c˜ao preferencial de reflex˜ao
W. Celes Ilumina¸c˜ao 14
Componente especular
C´alculo com half vector (Blin)
I
Evita c´alculo do vetor reflex˜ao
I
Half vector ´e a bissetriz de l e v
n l
h
ϴ
v
h = l + v
| l + v | i
spec= (n · h)
mshiCorrela¸c˜ao:
(r · v)
mshi⇡ (n · h)
4mshiCombinando fonte e material:
c
spec= max(n · h, 0)
mshim
spec⌦ s
spec IS´o pode ter reflex˜ao especular se n · l > 0
W. Celes Ilumina¸c˜ao 15
Pipeline de testes e operações
Frag Scissor test Alpha test Stencil test
Depth test
Blending Dithering Logical op. Frame
Buffer
Restringe área de desenho a um retângulo
Facilmente acelerada por hardware
API
glScissor ( x, y, w, h );
glEnable (GL_SCISSOR_TEST);
Teste sobre alpha dos fragmentos
Testados com relação a um valor de referência
glAlphaTest ( func, ref );
glEnable (GL_ALPHA_TEST);
func teste
GL_NEVER GL_ALWAYS GL_LESS GL_LEQUAL GL_EQUAL etc...
Nunca
Sempre
Se A f < ref
Se A f <= ref
Se A f == ref
...
Restringe área de desenho
Buffer de stencil requisitado na criação
Especificação do teste
glStencilFunc ( func, ref, mask );
func: GL_NEVER, GL_ALWAYS, GL_LESS, ...
ref: valor de referência
mask: máscara de bits (aplicadas a valor do stencil e ref)
Preenchimento do buffer de stencil
glStencilOp ( fail, zfail, zpass );
Op. válidas : GL_KEEP, GL_ZERO, GL_INCR, GL_REPLACE, ...
Ativação
glEnable (GL_STENCIL_TEST);
pelo valor de referência
Teste de visibilidade
Z-buffer requisitado na criação
glDepthFunc ( func ); // default: GL_LESS glEnable (GL_DEPTH_TEST);
Suporte a algoritmos de múltiplas passadas
Primeira: glDepthFunc ( GL_LESS );
Demais: glDepthFunc ( GL_EQUAL );
Combinação: glBlendFunc (GL_ONE, GL_ONE);
Combinação da cor do fragmento
sendo processado com a cor do pixel
depois da rasterização e antes do
fragmento ser desenhado no framebuffer.
Aplicações
transparência
composição digital
pintura
obs: blending não funciona com color index.
glBlendFunc (fator_frag, fator_pixel);
GL_ZERO src or dst (0,0,0,0)
GL_ONE src or dst (1,1,1,1)
GL_DST_COLOR src (R d ,G d ,B d ,A d ) GL_SRC_COLOR dst (R s ,G s ,B s ,A s )
GL_ONE_MINUS_DST_COLOR src (1,1,1,1) - (R d ,G d ,B d ,A d ) GL_ONE_MINUS_SRC_COLOR dst (1,1,1,1) - (R s ,G s ,B s ,A s ) GL_SRC_ALPHA src or dst (A s ,A s ,A s ,A s )
GL_ONE_MINUS_SRC_ALPHA src or dst (1,1,1,1) - (A s ,A s ,A s ,A s ) GL_DST_ALPHA src or dst (A d ,A d ,A d ,A d )
GL_ONE_MINUS_DST_ALPHA src or dst (1,1,1,1) - (A d ,A d ,A d ,A d )
GL_SRC_ALPHA_SATURATE src (f ,f ,f ,1); f = min(A s ,1-A d )
Resolve ordem de renderização
Quando distância em z é desprezível
Resolve problemas de precisão
Algoritmos de rasterização diferentes
Exemplos
Quadro numa parede
Folha de papel sobre mesa
Linhas de uma malha de elementos
glPolygonOffset (factor, units) o = r . units + m . Factor
r = menor valor que garante diferença em z w
m = declividade na profundidade
Textura
Mapeamento de textura
I
Modela padronagem de cor (textura de cor)
I
Modela ilumina¸c˜ao (mapa de ilumina¸c˜ao)
I
Modela rugosidade (mapa de normal)
I
Modela sombras (mapa de profundidade)
I
etc.
W. Celes Imagem e Textura 13
Mapeamento de textura
Mapeamento conceitual
mapeamento de textura
s
0.0 1.0
t
0.0 1.0
(s, t) (s, t)
(s, t)
W. Celes Imagem e Textura 14
Mapeamento de textura
Mapeamento fragmento a fragmento
mapeamento texel a texel
s t
(s, t) (s, t)
(s, t)
W. Celes Imagem e Textura 15
Textura
Cria¸c˜ao do objeto de textura
I
Requisita “nomes”
glGenTextures(int n, unsigned int ⇤texnames);
I
Associa objeto como corrente
glBindTexture(enum target, int texname);
I
Na finaliza¸c˜ao, deleta objetos
glDeleteTexture (int n, unsigned int ⇤texnames);
W. Celes Imagem e Textura 16
Textura
Especifica¸c˜ao de imagem do objeto de textura
glTexImage2D (GL TEXTURE 2D, level, iformat,
width, height, border, format, type, pixels );
I level
: n´ıvel da pirˆamide de mipmapping (a base tem valor 0)
I iformat
: formato interno
I border
: indica existˆencia de borda, 0 ou 1
W. Celes Imagem e Textura 17
Textura
Especifica¸c˜ao de imagem do objeto de textura
I
Dimens˜ao tem que ser potˆencia de 2: 2
n+ 2b
I
Exce¸c˜ao para “texturas retangulares”
I
Estrat´egias de ajustes
I
Re-escala (quando tem repeti¸c˜ao)
gluScaleImage (format,
in width, in height, in type, in pixels, out width, out height, out type, out pixels );
I
Mapeamento de sub´area (quanto n˜ao tem repeti¸c˜ao)
W. Celes Imagem e Textura 18
Textura
Especifica¸c˜ao de imagem do objeto de textura
I
Dimens˜ao tem que ser potˆencia de 2: 2
n+ 2b
I
Exce¸c˜ao para “texturas retangulares”
I
Estrat´egias de ajustes
I
Re-escala (quando tem repeti¸c˜ao)
gluScaleImage (format,
in width, in height, in type, in pixels, out width, out height, out type, out pixels );
I
Mapeamento de sub´area (quanto n˜ao tem repeti¸c˜ao)
W. Celes Imagem e Textura 18
Textura
Especifica¸c˜ao de imagem do objeto de textura
I
Dimens˜ao tem que ser potˆencia de 2: 2
n+ 2b
I
Exce¸c˜ao para “texturas retangulares”
I
Estrat´egias de ajustes
I
Re-escala (quando tem repeti¸c˜ao)
gluScaleImage (format,
in width, in height, in type, in pixels, out width, out height, out type, out pixels );
I
Mapeamento de sub´area (quanto n˜ao tem repeti¸c˜ao)
1.0 w/W 1.0
h/H
W. Celes Imagem e Textura 18
Textura
Outras formas de especifica¸c˜ao da imagem
I
Redefinindo sub-imagem
glTexSubImage2D (target, level,
xoffset, yoffset, w, h, format, type, pixels );
I
Copiando do frame bu↵er
glCopyTexture2D (target, level, iformat, x, y, w, h, border);
I
O↵screen rendering
I
pbu↵er, FBO
W. Celes Imagem e Textura 19
Pipeline de textura
Vértice x,y,z nx,ny,nz
geração
s, t transform s’, t’ sp, tp map/filtro
combinação fragmento fragres
texel rasterização por vértice por fragmento
W. Celes Imagem e Textura 20
Pipeline de textura
Gera¸c˜ao de coordenadas de textura
I
Dadas explicitamente como atributos de v´ertices
glTexCoord⇤ (s, t, r, q)
ou
glTexCoordPointer(nelem,type,offset,array);
glEnableClientState(GL TEXTURE COORD ARRAY);
I
Geradas automaticamente a partir dos dados dos v´ertices
I
Combina¸c˜ao linear no espa¸co do objeto
s = a
sx + b
sy + c
sz + d
st = a
tx + ...
I
Combina¸c˜ao linear no espa¸co do objeto
s = a
esx
e+ b
sey
e+ c
sez
e+ d
set = a
etx
e+ ...
W. Celes Imagem e Textura 21
Pipeline de textura
Gera¸c˜ao de coordenadas de textura
I
Dadas explicitamente como atributos de v´ertices
glTexCoord⇤ (s, t, r, q)
ou
glTexCoordPointer(nelem,type,offset,array);
glEnableClientState(GL TEXTURE COORD ARRAY);
I
Geradas automaticamente a partir dos dados dos v´ertices
I
Combina¸c˜ao linear no espa¸co do objeto
s = a
sx + b
sy + c
sz + d
st = a
tx + ...
I
Combina¸c˜ao linear no espa¸co do objeto
s = a
esx
e+ b
sey
e+ c
sez
e+ d
set = a
etx
e+ ...
W. Celes Imagem e Textura 21
Pipeline de textura
Especifica¸c˜ao dos “planos” geradores: a, b, c , d
I
Se gera¸c˜ao for no espa¸co do olho, o plano especificado ´e transformado para o espa¸co do olho.
glTexGeni (GL S, GL TEXTURE GEN MODE, GL OBJECT PLANE);
glTexGenfv (GL S, GL OBJECT PLANE, plane);
I
Ativa¸c˜ao da gera¸c˜ao autom´atica
glEnable (GL TEXTURE GEN S);
...
Quando usar espa¸co o objeto e espa¸co do olho?
I
Espa¸co do objeto: textura aplicada em um objeto
I
Espa¸co do olho: textura aplicada em todos os objetos da cena
W. Celes Imagem e Textura 22
Pipeline de textura
Especifica¸c˜ao dos “planos” geradores: a, b, c , d
I
Se gera¸c˜ao for no espa¸co do olho, o plano especificado ´e transformado para o espa¸co do olho.
glTexGeni (GL S, GL TEXTURE GEN MODE, GL OBJECT PLANE);
glTexGenfv (GL S, GL OBJECT PLANE, plane);
I
Ativa¸c˜ao da gera¸c˜ao autom´atica
glEnable (GL TEXTURE GEN S);
...
Quando usar espa¸co o objeto e espa¸co do olho?
I
Espa¸co do objeto: textura aplicada em um objeto
I
Espa¸co do olho: textura aplicada em todos os objetos da cena
W. Celes Imagem e Textura 22
Pipeline de textura
Transforma¸c˜ao aplicada `as coordenadas de textura 2
6 6 4
s
0t
0r
0q
03 7 7
5 = M
tex2 6 6 4
s t r q
3 7 7 5
I
Uso da API de transforma¸c˜ao
I
Pilha de matriz de textura
glMatrixMode(GL TEXTURE);
I
Todas as fun¸c˜oes de especifica¸c˜ao de transforma¸c˜oes
glLoadIdentity();
glTranslate⇤(...);
glRotate⇤(...);
glMultMatrix⇤(...);
...
gluPerspective(...);
gluLookAt(...);
...
W. Celes Imagem e Textura 23
Pipeline de textura
Mapeamento
I
Dado um fragmento com coordenada de textura interpolada (s, t ), acessa texel ( { r, g , b, a } ) correspondente
Modo de mapeamento (wrap)
I
Valores (s , t) fora do intervalo
glTexParameter⇤(target, pname, param);
I GL TEXTURE WRAP S
,
GL TEXTURE WRAP T, ...
I
Repeat, mirrored, clamp to edge, clamp to border
Tomas Akenine-M¨oller c 2002
W. Celes Imagem e Textura 24
Pipeline de textura
Filtros
I
Correspondˆencia entre fragmento e texel Amplia¸c˜ao (magnification)
I
Fragmento mapeado para um sub-texel
I
A ´area de um texel corresponde a v´arios pixels da tela
W. Celes Imagem e Textura 25
Pipeline de textura
Filtros de amplia¸c˜ao
I
Nearest: 1 texel por fragmento
I
Baixa qualidade (aliasing)
I
Linear: 4 texels por fragmento
I
Melhor qualidade (anti-aliasing)
Tomas Akenine-M¨oller c 2002
W. Celes Imagem e Textura 26
Pipeline de textura
Filtros de amplia¸c˜ao
I
Nearest: 1 texel por fragmento
I
Baixa qualidade (aliasing)
I
Linear: 4 texels por fragmento
I
Melhor qualidade (anti-aliasing)
Tomas Akenine-M¨oller c 2002
W. Celes Imagem e Textura 26
Pipeline de textura
Filtros de amplia¸c˜ao
I
Nearest: 1 texel por fragmento
I
Baixa qualidade (aliasing)
I
Linear: 4 texels por fragmento
I
Melhor qualidade (anti-aliasing)
nearest linear
Tomas Akenine-M¨oller c 2002
W. Celes Imagem e Textura 26
Pipeline de textura
Redu¸c˜ao (minification)
I
A ´area de um fragmento corresponde a v´arios texels
W. Celes Imagem e Textura 27
Pipeline de textura
Filtros de redu¸c˜ao
I
Nearest: um texel por fragmento
I
Baixa qualidade (aliasing)
I
Linear: 4 texels por fragmento
I
Ainda baixa qualidade (aliasing)
W. Celes Imagem e Textura 28
Pipeline de textura
Filtros de redu¸c˜ao
I
Nearest: um texel por fragmento
I
Baixa qualidade (aliasing)
I
Linear: 4 texels por fragmento
I
Ainda baixa qualidade (aliasing)
W. Celes Imagem e Textura 28
Filtro de redu¸c˜ao
Problema de falta de amostragem de sinal
Nyquist rate
A frequˆencia da amostragem deve ser pelo menos duas vezes maior que a frequˆencia do sinal
W. Celes Imagem e Textura 29
Filtro de redu¸c˜ao
Problema de falta de amostragem de sinal
Nyquist rate
A frequˆencia da amostragem deve ser pelo menos duas vezes maior que a frequˆencia do sinal
W. Celes Imagem e Textura 29
Filtro de redu¸c˜ao
Para alcan¸car o Nyquist rate:
como n˜ao se pode aumentar o n´ umero de amostras (resolu¸c˜ao da tela), diminui-se a frequˆencia do sinal, isto ´e, diminui-se a textura.
Pirˆamide de mipmapping
Tomas Akenine-M¨oller c 2002
W. Celes Imagem e Textura 30
Filtro de redu¸c˜ao
Para alcan¸car o Nyquist rate:
como n˜ao se pode aumentar o n´ umero de amostras (resolu¸c˜ao da tela), diminui-se a frequˆencia do sinal, isto ´e, diminui-se a textura.
Pirˆamide de mipmapping
Tomas Akenine-M¨oller c 2002
W. Celes Imagem e Textura 30
Filtro de redu¸c˜ao
Filtro trilinear
I
Aplica filtro bilinear em dois n´ıveis adjacentes da pirˆamide
I
Interpola linearmente os dois texels encontrados
C´alculo do n´ıvel da pirˆamide
I
Busca-se rela¸c˜ao de um texel por fragmento
= log
2⇢ + lod
biasonde:
I
: n´ıvel da pirˆamide (0 representa a base)
I
⇢: m´aximo fator de escala entre pol´ıgono na tela e textura
I
lod
bias: constante definida via
glTexEnv⇤()(default ´e 0.0) Pode-se controlar os n´ıveis m´ınimo e m´aximo usados no filtro.
W. Celes Imagem e Textura 31
Filtro de redu¸c˜ao
Filtro trilinear
I
Aplica filtro bilinear em dois n´ıveis adjacentes da pirˆamide
I
Interpola linearmente os dois texels encontrados C´alculo do n´ıvel da pirˆamide
I
Busca-se rela¸c˜ao de um texel por fragmento
= log
2⇢ + lod
biasonde:
I
: n´ıvel da pirˆamide (0 representa a base)
I
⇢: m´aximo fator de escala entre pol´ıgono na tela e textura
I
lod
bias: constante definida via
glTexEnv⇤()(default ´e 0.0)
Pode-se controlar os n´ıveis m´ınimo e m´aximo usados no filtro.
W. Celes Imagem e Textura 31
Filtro de redu¸c˜ao
Filtro trilinear
I
Aplica filtro bilinear em dois n´ıveis adjacentes da pirˆamide
I
Interpola linearmente os dois texels encontrados C´alculo do n´ıvel da pirˆamide
I
Busca-se rela¸c˜ao de um texel por fragmento
= log
2⇢ + lod
biasonde:
I
: n´ıvel da pirˆamide (0 representa a base)
I
⇢: m´aximo fator de escala entre pol´ıgono na tela e textura
I
lod
bias: constante definida via
glTexEnv⇤()(default ´e 0.0) Pode-se controlar os n´ıveis m´ınimo e m´aximo usados no filtro.
W. Celes Imagem e Textura 31
Constru¸c˜ao da pirˆamide de mipmapping
Vers˜ao 3.0 ou posterior
glGenerateMipmap (target);
I target
:
GL TEXTURE 1D, GL TEXTURE 2D, ...I
Pirˆamide constru´ıda entre n´ıveis:
GL TEXTURE BASE LEVEL
e
GL TEXTURE MAX LEVELVers˜oes anteriores
I
Especifica imagem e constroi pirˆamide
gluBuild1DMimaps
(target, iformat, width, format, type, ⇤texels);
gluBuild2DMimaps
(target, iformat, width, height, format, type, ⇤texels);
gluBuild3DMimaps
(target, iformat, width, height, depth, format, type, ⇤texels);
W. Celes Imagem e Textura 32
Filtro de textura
API para defini¸c˜ao do filtro
glTexParameter⇤ (target, param, value);
I
Filtro de amplia¸c˜ao:
GL TEXTURE MAG FILTERI GL NEAREST, GL LINEAR
I
Filtro de redu¸c˜ao:
GL TEXTURE MIN FILTERI GL NEAREST, GL LINEAR,
GL NEAREST MIPMAP NEAREST, GL LINEAR MIPMAP LINEAR, ...
W. Celes Imagem e Textura 33
Mipmapping
0 1 2 3
W. Celes Imagem e Textura 34
Compara¸c˜ao entre filtros
Filtros nearest x bilinear
c David Kirk/NVIDIA and Wen-mei W. Hwu, 2007
W. Celes Imagem e Textura 35
Compara¸c˜ao entre filtros
Filtros bilinear x trilinear
c David Kirk/NVIDIA and Wen-mei W. Hwu, 2007
W. Celes Imagem e Textura 36
Compara¸c˜ao de desempenho
Compara¸c˜ao entre 4 diferentes m´aquinas
SIGGRAPH 2002, Course # 37, Performance OpenGL: Platform Independent Techniques
W. Celes Imagem e Textura 37
Espa¸co de mem´oria
Qual o espa¸co de mem´oria adicional para armazenar a pirˆamide?
I
Considerando uma imagem RGB
Gasta-se apenas 1/3 a mais de mem´oria para textura RGB
W. Celes Imagem e Textura 38
Espa¸co de mem´oria
Qual o espa¸co de mem´oria adicional para armazenar a pirˆamide?
I
Considerando uma imagem RGB
Gasta-se apenas 1/3 a mais de mem´oria para textura RGB
W. Celes Imagem e Textura 38
Espa¸co de mem´oria
Qual o espa¸co de mem´oria adicional para armazenar a pirˆamide?
I
Considerando uma imagem RGB
Gasta-se apenas 1/3 a mais de mem´oria para textura RGB
W. Celes Imagem e Textura 38
Espa¸co de mem´oria
Qual o espa¸co de mem´oria adicional para armazenar a pirˆamide?
I
Considerando uma imagem RGB
Gasta-se apenas 1/3 a mais de mem´oria para textura RGB
W. Celes Imagem e Textura 38
Filtro de mipmapping
Filtro isotr´opico
I
Usa-se a quadril´atero que aproxima o mapeamento do fragmento no espa¸co de textura
texel
projected fragment
quadrilátero
I
N´ıvel da pirˆamide: = log
2⇢ + lod
bias, onde ⇢ = p Q
area ITende a “embassar” demasiadamente a imagem (overblur)
W. Celes Imagem e Textura 39
Filtro de mipmapping
Filtro anisotr´opico
I
Utiliza diversas amostras e faz a m´edia dos texels resultantes
amostras de mipmapping linha de anisotropia
W. Celes Imagem e Textura 40
Compara¸c˜ao entre filtros
Filtro anisotr´opico deixa imagem mais n´ıtida
c Tom’s Hardware guide
W. Celes Imagem e Textura 41
Compara¸c˜ao entre filtros
Filtro anisotr´opico “retarda” subida na pirˆamide
c Tom’s Hardware guide
W. Celes Imagem e Textura 42
Fun¸c˜oes de textura
Determina combina¸c˜ao de cor do fragmento com texel resultante
glTexEnv⇤ (target, pname, param);
Fun¸c˜oes (para textura RGBA)
I
Replace: c = c
t, a = a
t IModulate: c = c
fc
t, a = a
tI
Decal: c = c
f(1 a
t) + c
ta
t, a = a
f IBlend: c = c
f(1 a
t) + c
cc
t, a = a
fa
tCom programa¸c˜ao em placa gr´afica podemos fazer combina¸c˜ao procedural
W. Celes Imagem e Textura 43
Fun¸c˜oes de textura
Replace e Modulate
W. Celes Imagem e Textura 44
Textura 1D
Exemplos de aplica¸c˜ao
I
Mapas de propriedades
I
Escala de cores na textura
I
Propriedade mapeada para coordenada s
I Matriz de textura normaliza valores
I
N´evoa vertical
I
Intensidade da n´evoa mapeada na textura
I
Valor de s proporcional a altura
W. Celes Imagem e Textura 48
Textura 3D
Exemplos de aplica¸c˜oes
I
Aplica¸c˜ao de propriedades 3D
I
Material volum´etrico
I
Mapa 3D de ilumina¸c˜ao
I
Visualiza¸c˜ao volum´etrica
I
Area m´edica ´
I
Area cient´ıfica ´
W. Celes Imagem e Textura 49