Finalizando o post anterior, vamos abordar a estrutura das placas de vídeo e alguns termos utilizados no meio.
O Frame Rate
Um ponto delicado nos jogos e aplicações é o frame rate. Para muitos, valores altos significam maior qualidade, mas as coisas não são fáceis assim.
O frame rate é o tempo que a placa leva para exibir uma cena na tela. Como este tempo pode ser absurdamente pequeno, o frame rate é calculado em segundos. Então, quanto mais cenas renderizadas e exibidas por segundo maior será o frame rate. Por usar os segundos para medir a quantidade de cenas renderizadas usamos o termo frame rate per secund, ou apenas FPS.
Então, o motivo pelo qual algumas pessoas acreditam que quanto maior o FPS melhor está associado a questão de velocidade, quanto mais FPS mais rápido é o hardware, e quanto mais rápido melhor.
Nem sempre necessitamos de altas taxas de FPS, na realidade o FPS é utilizado para medir a fluidez da ação. Num jogo de cartas, não existe a necessidade de um FPS muito alto o tempo todo, pode-se utilizar um fps maior nas animações de embaralhar cartas e distribuir. Em outros jogos, como de ação, a quantidade de FPS exigida é maior devido a uma constante atualização da cena.
Então, quando alguém falar que seu jogo deve ter 60fps, leve em consideração a quantidade de atualizações na cena, este tipo de cuidado pode aperfeiçoar sua aplicação e garantir tempo livre do processador, sem contar trabalho desnecessário para gerar cenas iguais.
Arquitetura e funções
Ao escolher uma placa é importante conhecer a arquitetura básica e suas funcionalidades. Nós vimos anteriormente que as placas modernas suportam openGL da mesma forma que o Direct3D. Por uma simples razão: o pipeline 3D é o mesmo, não importando qual API é utilizada. Portanto, as características técnicas das placas 3D são válidas para as duas APIs. Vamos lá, vamos começar a analisar nosso hardware.
O primeiro de tudo, vamos olhar um esquema de hardware simplificado que está presente nas placas de vídeo. Este esquema é válido para todas as placas. Pode-se distinguir 3 componentes principais: A GPU, a memória ram do vídeo e o RAMDAC(em desuso).
O RAMDAC
Vamos entender o que é o RAMDAC (Random Access Memory Digital Analogic Converter). O RAMDAC permite converter dados numéricos do frame buffer em dados analógicos para serem enviados para a tela. O desempenho do RAMDAC, dado em Mhz, deve ser estudado com cuidado. A freqüência de funcionamento do RAMDAC é calculada levando em consideração a resolução final e a freqüência vertical do monitor na seguinte relação: Freq RAMDAC= largura * altura * Vfreq * 1.32
A largura e a altura são, respectivamente, a largura e altura em pixels da tela (1024×768, 1280×1024, etc.), a Vfreq é a freqüência de atualização da tela e 1.32 é um fator que leva em conta a inércia dos tubos de raios catódicos. Vale lembrar que os monitores LCDs não utilizam este componente.
A memória de Vídeo
Agora, vamos dar uma olhada na memória de vídeo. Esta memória tem como principal função armazenar dados para o processador gráfico, a GPU. Então a quantidade de memória pode ser um fator importante? Não necessariamente. Mas quais os dados armazenados exatamente?
Para aplicações clássicas, como editores de texto, os únicos dados armazenados são o conteúdo das telas. Estes dados ficam em uma área particular chamada frame buffer. Nossas telas de computador permitem visualizar o conteúdo do frame buffer diretamente(para telas numéricas como o LCD).
Vamos supor que estamos utilizando uma resolução de 1600×1200 no modo true color, isto quer dizer que cada pixel é mostrado na tela com 3 bytes (1 byte para cada componente de cor RGB, Red Green e Blue). A quantidade de memória necessária para o frame buffer é: 1600 x 1200 x 3. O resultado é pouco mais de 5.6MB. Então vem a pergunta, é necessária uma placa de vídeo com 256MB? Mas e se estivermos usando para aplicações gráficas?
Quanto trabalhamos com aplicações 3D a memória é utilizada com maior freqüência, e não só para armazenar a tela, mas para outras funcionalidades. Para isto a memória é dividida em zonas. Existem 5 grandes zonas:
- O Frame Buffer: Aqui é onde a imagem definitiva é exibida na tela. Alguns chamam essa área de color buffer.
- Back Buffer: é a área da memória onde armazenamos a cena enquanto estamos trabalhando nela. Quanto terminamos sua renderização o back buffer torna-se o frame buffer e vice-versa. Esta técnica é conhecida como double buffering. O back buffer tem o mesmo tamanho do frame buffer.
- Os buffers depth, stencil e accumulation: Os buffers depth e stencil são fundamentais para a renderização de cenas 3D. O primeiro, depth buffer, é capital, é graças a ele que podemos exibir objetos 3D de forma adequada, ou seja, os objetos mais distantes não são exibidos na frente dos mais próximos da camera. O depth buffer é também chamado de Z-Buffer, sendo responsável por armazenar informações de profundidade da cena. O stencil buffer é muito empregado para todos os tipos de efeitos gráficos dos quais se destacam o volume por sombra. O accumulation buffer, é usado principalmente para efeitos de soft-focus em tempo real. O tamanho do depth buffer depende da sua precisão de teste, 16 ou 32 bits. No último caso, o tamanho do buffer de profundidade(z-buffer) é calculado pela altura x largura x 4.
- O vertex buffer: Área da memória onde os vértices dos objetos 3D são armazenados (VBO ou Vertex Buffer Object no openGL). Seu tamanho é variável.
- O texture buffer: Esta área é a maior porque é nela que todas as texturas usadas pela aplicação 3D serão armazenadas. Quando se sabe que uma textura de 2048×2048 em 24 bits ocupa cerca de 12Mb, é fácil entender porque o texture buffer tem uma cota maior da memória de vídeo.
Com estas informações podemos calcular o quanto de memória uma aplicação 3D usando 4 texturas de 2048×2048 de 24 bits, mostrada numa resolução de 1600×1200 em 24 bits, e usando a técnica de double buffer ocupa.
mem_occupada = 2048*2048*3*4 + 1600*1200*3*2 + 1600*1200*4
men_ocupada = 60MB
Então sabemos porque as placas estão aumentando a quantidade de memória ram, mas também aprendemos que a quantidade não está relacionda a capacidade de placa, afinal uma FX5200 com 1G nunca será superior à uma FX5900 com 512M.
A GPU
A GPU é o principal componente das placas de vídeo. Ela é responsável pelos cálculos 3D realizados, de transformações à efeitos. Também é na GPU que os triângulos são transformados em pixels no formato do frame buffer.
Mas, por que triângulos? A resposta é simples, 3 pontos sempre irão formar um triangulo no espaço 3D, e essa garantia torna desnecessária a criação de código para validar a forma, tornando-a mais rápida de se desenhar. Imagine se no lugar de triângulos fossem usados quadrados.

Quatro pontos não definem um quadrado
Como pode ser visto na imagem acima, 4 pontos no espaço não necessariamente formam um quadrado. Para usar quadrados seria necessário um código para validar sua forma e garantir que sempre seria um quadrado.
A GPU é responsável por diversas funções, e para identificar quais funções elas são capazes de realizar é necessário conhecer a nomenclatura dada por cada fabricante, ou olhar as especificações da placa.
Agora que conhecemos o básico das placas de vídeo, nos próximos tutoriais sobre o assunto vamos abordar a programação da GPU.
ciao


your articles are interesting and so useful for me. Thank you for sharing great information
By: sampan on January 16, 2009
at 2:56 pm