Posted by: mitus | January 15, 2009

Placas de Video 2

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

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



Responses

  1. your articles are interesting and so useful for me. Thank you for sharing great information


Leave a response

Your response:

Categories