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.
4.1 Estimativas em superfícies discretas 67<br />
intervenção da CPU. Isto po<strong>de</strong> ser feito no processador <strong>de</strong> fragmentos ao amostrar cada texel do mapa<br />
<strong>de</strong> textura <strong>de</strong> origem, modificar a informação obtida e escrever o resultado a uma textura <strong>de</strong> <strong>de</strong>stino<br />
com um mapeamento biunívoco entre os texels <strong>de</strong> ambas as texturas. Tal procedimento é freqüen-<br />
temente implementado através da ren<strong>de</strong>rização <strong>de</strong> um quadrilátero que cobre a textura <strong>de</strong> <strong>de</strong>stino (o<br />
alvo <strong>de</strong> ren<strong>de</strong>rização), e mapeado com a textura <strong>de</strong> origem <strong>de</strong> modo que cada fragmento rasterizado<br />
do quadrilátero correspon<strong>de</strong> a um texel da textura <strong>de</strong> <strong>de</strong>stino. Conforme <strong>de</strong>talhamos na seção 2.4.3,<br />
isto simula o funcionamento <strong>de</strong> um processador <strong>de</strong> fluxo no qual cada elemento <strong>de</strong> um fluxo <strong>de</strong> en-<br />
trada é processado por uma função kernel (neste caso, o sha<strong>de</strong>r <strong>de</strong> fragmentos) e o resultado é enviado<br />
a um fluxo <strong>de</strong> saída.<br />
Os únicos atributos associados aos vértices do quadrilátero são as coor<strong>de</strong>nadas <strong>de</strong> textura que<br />
mapeiam a textura <strong>de</strong> origem no quadrilátero. <strong>Uma</strong> vez que os texels da textura <strong>de</strong> origem são ma-<br />
peados <strong>de</strong> forma biunívoca aos texels da textura <strong>de</strong> <strong>de</strong>stino, as coor<strong>de</strong>nadas <strong>de</strong> textura interpoladas,<br />
fornecidas como entrada do processador <strong>de</strong> fragmentos, correspon<strong>de</strong>m automaticamente aos índices<br />
dos arranjos convertidos em 2D. Dessa forma, a função In<strong>de</strong>x1DTo2D não precisa ser utilizada<br />
neste caso.<br />
No algoritmo <strong>de</strong> Calver [2004], os vetores normais po<strong>de</strong>m ser calculados simultaneamente com a<br />
ren<strong>de</strong>rização do mo<strong>de</strong>lo, ou po<strong>de</strong>m ser armazenados em novas texturas – evitando, assim, a transfe-<br />
rência <strong>de</strong> dados entre a CPU e a GPU – que po<strong>de</strong>m ser amostradas no processador <strong>de</strong> vértices durante<br />
o passo <strong>de</strong> ren<strong>de</strong>rização. Como forma <strong>de</strong> simplificar a implementação, o algoritmo impõe um limite<br />
máximo <strong>de</strong> 6 a 8 faces adjacentes a cada vértice (o vetor normal ao vértice é calculado como a média<br />
dos vetores normais das faces adjacentes).<br />
O algoritmo é baseado no algoritmo <strong>de</strong> Blinn [1977] que primeiramente calcula os vetores normais<br />
às faces e, para cada vértice, normaliza os vetores normais acumulados das faces adjacentes. Na GPU,<br />
isso é implementado como três passos <strong>de</strong> ren<strong>de</strong>rização usando a estratégia <strong>de</strong> processamento <strong>de</strong> fluxo<br />
<strong>de</strong>scrita anteriormente. O primeiro passo armazena os atributos modificados da geometria <strong>de</strong>formada,<br />
enquanto que os outros dois utilizam estes dados para finalmente calcular as normais às faces e aos<br />
vértices:<br />
1. Atualização da posição dos vértices: Cada texel do mapa <strong>de</strong> posição <strong>de</strong> vértices é lido e<br />
processado pela função <strong>de</strong> <strong>de</strong>formação <strong>de</strong>pen<strong>de</strong>nte da aplicação. O resultado é armazenado em<br />
um novo mapa <strong>de</strong> posição <strong>de</strong> vértices que é utilizado nos passos subseqüentes.<br />
2. Cálculo das normais às faces: Cada texel do mapa <strong>de</strong> faces é lido <strong>de</strong> modo a obter os 3 índices<br />
dos vértices que compõem a face. O mapa <strong>de</strong> vértices atualizado é então amostrado nos índices<br />
dados <strong>de</strong> modo a obter a posição <strong>3D</strong> <strong>de</strong> cada vértice da face, no sistema <strong>de</strong> coor<strong>de</strong>nadas do<br />
objeto. Com tais dados, a normal à face é obtida através do produto vetorial <strong>de</strong> quaisquer dois