antónio ramires fernandes & luís paulo santos – adaptado por alex f. v. machado computação...
TRANSCRIPT
António Ramires Fernandes & Luís Paulo Santos – Adaptado por Alex F. V. MachadoAntónio Ramires Fernandes & Luís Paulo Santos – Adaptado por Alex F. V. Machado
Computação Gráfica
Pipeline Gráfico
Definições
• Pipeline:Como é chamado o conjunto das etapas de realização de um processo quando este envolve mais de um estágio.
• Pipeline Gráfico:Ou Pipeline de Renderização, se refere ao conjunto dos processos que acontecem via hardware por meio de uma placa de vídeo que envolve desde a definição de vértices até a renderização decorrente na tela.
Pipeline Gráfico
• O pipeline gráfico normalmente aceita como entrada cenários 3D e resulta em uma imagem raster 2D de saída.
• OpenGL e Direct3D são dois modelos de pipeline gráfico aprovados como padrão na indústria.
Pipeline Gráfico
• Uma representação possível:
Pipeline Gráfico
• A ordem das operações no OpenGL pode ser vista como seguindo a ordem representada pelo pipeline abaixo:
5
Display Lists
6
Os comandos (geometria ou pixels) podem ser compilados numa display listEstes comandos são armazenados de forma eficiente e enviados para o pipeline sempre que a display list é executada.
Evaluators
7
Toda a geometria deve ser descrita usando vértices. Curvas e superfícies paramétricas, que são inicialmente descritas usando pontos de controle e funções base, são convertidas em representações baseadas em vértices pelos evaluators.
Operações por vértice
8
Transformações geométricas e projecção no espaço do êcran.Iluminação (cálculo da cor do vértice)Coordenadas de textura
Montagem das primitivas
9
View Frustrum clipping.Back face culling, depth evaluation and perspective divisionOutput: Primitivas geométricas transformadas com info sobre cor e coordenadas de texturas para cada vértice
Operações por pixel
10
Transformação de formatos, transformações aplicadas às texturasLeituras do frame buffer.
Montagem de texturas
11
Texture objects.Muti-texturing.Essencialmente, optimizações ao armazenamento e acesso (read/write) a texturas
Rasterização
12
Conversão das primitivas geométricas em fragmentos.Cada fragmento corresponde a um pixel no frame buffer.Cálculo dos fragmentos correspondentes ao interior de um polígono.Cálculo cor, profundidade e coord. de textura por fragmento (interpolação)
Operações por fragmento
13
Aplicação de um texel a cada fragmento. Cálculo de nevoeiro (fog).Alpha-test e depth-buffer test (remoção de superfícies ocludidas)Blending, dithering and masking.Escrita final no frame buffer.
Redundância
• Todos os vértices são iluminados, antes de ser feito qualquer tipo de culling
• Todas as primitivas que passam o teste de culling dão origem a fragmentos e todos os fragmentos recebem uma cor, coordenadas de textura e um texel antes do teste do Z-buffer
Corolário:• São processados muitos vértices e fragmentos que
acabarão por não ser visíveis
14
Iluminação RasterView Frustrum
&Back face culling
Texturização Alpha & ZTest
View Frustrum Culling
• Detectar, por software (i.e., no CPU), quais as primitivas geométricas que não são visíveis por não pertencerem ao campo de visão da câmara
15
View Frustrum Culling
• Determinar a forma do frustrum
16
Definição do frustrumgluPerspective(fov, ratio, nearDist, farDist);gluLookAt(px,py,pz, lx,ly,lz, ux,uy,uz)
View Frustrum Culling
• Objectos– Testar se TODOS os vértices de TODOS os polígonos
que constituem um objecto estão fora do frustrum não é suficiente para garantir que o objecto está totalmente fora do frustrum
– De qualquer forma, testar todos os vértices poderia levar mais tempo do que deixar ser o sistema gráfico a fazer o clipping
17
View Frustrum Culling
• Objectos– Uma alternativa é calcular um volume elementar que
contenha toda a geometria do objecto e testar se este volume está dentro do frustrum
– Volumes elementares: esferas e Axis Aligned Boxes (AAB)
18
Dependendo da forma do objecto o volume pode ser mais ou menos eficaz, isto é, ser considerado dentro do frustrum sem que nenhum triângulo aí contido esteja efectivamente dentro do frustrum
View Frustrum Culling
• Hierarquia de Volumes– Para cenas complexas pode-se justificar utilizar
hierarquias: se uma AAB de nível mais elevado não pertence ao frustrum, então não se justifica testar as interiores
19
Shader
- O shader consiste em modificar o pipeline gráfico em dois pontos: Vértices e Pixels.
- No tratamento do vértice pode-se mudar a cor, vetor de reflexão, posição, etc. Tem melhor desempenho que o outro.
- No tratamento de pixels pode fazer alterações de cor e posição, é mais pesado pois executa em todos os pixels da imagem.
- Para programar Shader é necessário verificar se o programa usado (modelador 3d, game engine) tem suporte a shader e como importá-los.
- Depois pode-se programar em HLSL (específico do DirectX), GLSL (específico do OpenGL) ou NVidia's Cg (funciona como HLSL + GLSL).