03.04.2013 Views

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

SHOW MORE
SHOW LESS

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>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!