Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp
Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp
Uma Arquitetura de Suporte a Interações 3D ... - DCA - Unicamp
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
2.4 <strong>Arquitetura</strong> das GPUs programáveis 31<br />
matriz <strong>de</strong> transformação do mo<strong>de</strong>lo (que converte coor<strong>de</strong>nadas locais do mo<strong>de</strong>lo para coor<strong>de</strong>nadas<br />
globais da cena), concatenada com a matriz <strong>de</strong> visão (que converte coor<strong>de</strong>nadas globais para coor<strong>de</strong>-<br />
nadas relativas à câmera) e a matriz <strong>de</strong> projeção, resultando em um vértice <strong>de</strong>scrito em coor<strong>de</strong>nadas<br />
homogêneas do espaço <strong>de</strong> recorte do volume <strong>de</strong> visão canônico [Shreiner et al., 2005]. Nesse estágio,<br />
a fórmula do mo<strong>de</strong>lo <strong>de</strong> iluminação é processada para cada vértice e as informações <strong>de</strong> cores resul-<br />
tantes são incluídas em atributos <strong>de</strong> cores do vértice calculado. Na etapa seguinte (estágio 3), são<br />
montadas as primitivas a partir dos vértices processados (pontos, linhas e triângulos). Tais primitivas<br />
são recortadas pelo volume <strong>de</strong> visão e <strong>de</strong>scartadas quando sua faces formam um ângulo maior do que<br />
90 graus com relação ao vetor <strong>de</strong> visão (back-face culling). A posição <strong>de</strong> cada vértice é finalmente<br />
dividida por sua coor<strong>de</strong>nada homogênea <strong>de</strong> modo a produzir o efeito <strong>de</strong> perspectiva e obter as coor-<br />
<strong>de</strong>nadas no sistema <strong>de</strong> coor<strong>de</strong>nadas da janela <strong>de</strong> visão. Essa etapa (estágio 4) finaliza o processo <strong>de</strong><br />
transformação geométrica e tem como resultado primitivas projetadas na tela, prontas para o processo<br />
<strong>de</strong> amostragem e processamento <strong>de</strong> fragmentos.<br />
O rasterizador (estágio 5) gera os fragmentos dos pixels coinci<strong>de</strong>ntes com cada primitiva pro-<br />
jetada na tela, obtendo atributos a partir dos vértices segundo o mo<strong>de</strong>lo <strong>de</strong> interpolação escolhido<br />
(flat ou smooth). Após serem texturizados segundo a amostragem e combinação <strong>de</strong> diferentes tex-<br />
turas (estágio 6), cada fragmento po<strong>de</strong> ser modificado <strong>de</strong> acordo com configurações <strong>de</strong> neblina (fog)<br />
e combinação <strong>de</strong> opacida<strong>de</strong> segundo uma componente <strong>de</strong> cor alfa (alpha blending) (estágio 7). Por<br />
fim, cada fragmento é testado segundo os testes <strong>de</strong> opacida<strong>de</strong> (alpha test), profundida<strong>de</strong> (<strong>de</strong>pth test)<br />
e estêncil (stencil test) ( estágio 8). Tendo passado por todos os testes, a cor resultante e o valor <strong>de</strong><br />
profundida<strong>de</strong> do pixel são enviados ao frame buffer (estágio 9).<br />
<strong>Uma</strong> vez que a atual arquitetura <strong>de</strong> hardware gráfico programável mantém a compatibilida<strong>de</strong> com<br />
o fluxo <strong>de</strong> função fixa, a aplicação po<strong>de</strong> escolher entre programar apenas o processador <strong>de</strong> vértices,<br />
apenas o processador <strong>de</strong> fragmentos, ou os dois ao mesmo tempo. Se apenas o processador <strong>de</strong> vértices<br />
é programado, o fluxo <strong>de</strong> ren<strong>de</strong>rização utilizará a função fixa <strong>de</strong> processamento <strong>de</strong> fragmentos. Da<br />
mesma forma, se apenas o processador <strong>de</strong> fragmentos for programado, o fluxo <strong>de</strong> função fixa <strong>de</strong> trans-<br />
formação e iluminação <strong>de</strong> vértices será utilizado. Por outro lado, não é possível utilizar o processador<br />
<strong>de</strong> vértices em conjunto com o fluxo <strong>de</strong> função fixa <strong>de</strong> processamento <strong>de</strong> vértices, ou o processador <strong>de</strong><br />
fragmentos em conjunto com o fluxo <strong>de</strong> função fixa <strong>de</strong> processamento <strong>de</strong> fragmentos. Um diagrama<br />
em blocos ilustrando os estágios <strong>de</strong> processamento <strong>de</strong> um fluxo programável é mostrado na figura 2.3.<br />
As modificações são fundamentalmente a substituição da etapa <strong>de</strong> transformação e iluminação pelo<br />
processador <strong>de</strong> vértices, e substituição da etapa <strong>de</strong> texturização pelo processador <strong>de</strong> fragmentos.<br />
No nível mais baixo <strong>de</strong> abstração, sha<strong>de</strong>rs <strong>de</strong> vértices e fragmentos são escritos através <strong>de</strong> lingua-<br />
gens semelhantes às linguagens <strong>de</strong> montagem das CPUs. Por outro lado, não são consi<strong>de</strong>radas como<br />
linguagens <strong>de</strong> máquina, mas linguagens intermediárias cujas instruções são traduzidas em tempo <strong>de</strong>