Placas de Vídeo
Placas 3D

Este texto visa esclarecer as dúvidas mais comuns sobre placas 3D.

1) 3DFX é apenas o nome de um fabricante de processadores gráficos, e não um recurso ou uma interface de programação (API - Aplication Programming Interface) como muitos desinformados pensam.

2) API é uma interface de programação, é através das API's 3D que os jogos fazem as chamadas aos recursos de hardware oferecidos pelos processadores gráficos.

3) Há três tipos de API's usadas mais comumente pelas softwarehouses para fazerem a programação 3D de jogos (há outras, mas não usadas em jogos): Open GL, Direct 3D, e Glide. A Open GL é a que oferece mais recursos aos programadores, proporcionando também maior facilidade de programação, esta API foi criada pela gigante Silicon Graphics e foi recentemente licenciada pela Microsoft. Um exemplo de jogo que usa esta API é o Quake II.

A Direct3D é a API mais utilizada atualmente por jogos. Apesar de não ser a API mais poderosa (posto ocupado pela OpenGL), ela fornece recursos bastante avançados para a criação de jogos, e novas funcionalidades são apresentadas a cada versão lançada pela Microsoft. Como exemplo, pode-se citar a inclusão de "Environment Mapped Bump Mapping" do DirectX 6, ou então de aceleração por hardware de Transforms and Lighting, na versão 7. No caso da OpenGL, novas características podem ser adicionadas sem a necessidade de uma nova versão ser lançada, utilizando seu recurso de extensões. A qualidade de imagem final é mais dependente dos recursos oferecidos pela placa de vídeo do que pela API em si, e atualmente é considerado que a melhor qualidade de imagem em aplicações 3D como jogos é alcançada pelos chips da Matrox (série G400) e da NVIDIA (GeForce 256).

A GLIDE é uma API desenvolvida pela 3dfx que fornece instruções de baixo nível para a sua arquitetura "Voodoo". Assim, ela não é facilmente utilizada por outros chips, acarretando em uma queda de performance devido às diferenças de arquitetura, e também ela acaba por refletir as limitações da série Voodoo (até a 3). Recentemente a 3dfx liberou o código fonte da API além de especificações de baixo nível para suas placas atuais, declarando que irá passar a concentrar os esforços no desenvolvimento de drivers para Direct 3D e OpenGL. Enquanto isso é uma boa notícia para plataformas não tão bem suportadas como o Windows (por exemplo Linux e FreeBSD), ela mostra que essa API está nos seus últimos dias. Muito provavelmente uma manobra desse tipo mostra que a próxima geração das placas Voodoo (com o novo chip VSA-100) apresenta uma nova arquitetura, incompatível com as antigas, tornando a utilização da GLIDE por essas novas placas tão complicada como para as placas concorrentes atuais.

4) Ao escolher uma placa 3D você deve verificar então quais são as API's que esta placa suporta, como é de se esperar praticamente todas as placas 3D possuem suporte à API Direct 3D, grande parte, além de suportar Direct 3D também suporta Open GL, outras suportam ainda Glide. Pelo que vimos no item 3 não devemos dar importância à presença de suporte à API Glide, mas é fundamental que tenha suporte a D3D e a OpenGL, D3D porque é a API da Microsoft e a de 99,9% dos jogos, e OpenGL porque é a API usada por aplicativos 3D profissionais e por alguns jogos como Quake.

5) Ao lado da placa 3D é de fundamental importância que tenhamos um processador central potente em operações de ponto flutuante (as instruções 3D Now! - do K6-II - nada mais são do que um tipo específico de instruções de ponto flutuante para ser utilizado em jogos e outros aplicativos 3D), pois cabe à CPU o cálculo do posicionamento de todos os vértices dos triângulos que formam a imagem (claro! é a CPU que calcula a posição relativa de tudo a ser mostrado no monitor). Isto é feito através de um pesado cálculo tridimensional e, depois recalculados e posicionados em um plano (2D) afinal a tela do seu monitor somente pode apresentar imagens em duas dimensões, quem conhece cálculo entende a complexidade dos cálculos que estou falando. Este "rascunho" de imagem é então enviado para o placa de vídeo 3D, cabe ao processador 3D aplicar a estes vértices a construção dos triângulos e posterior renderização da imagem com a texturização e todos os demais efeitos 3D suportados. Caso o processador gráfico não suporte um efeito específico, dependendo do efeito, este poderá ser um efeito que a CPU possa emular, esta emulação não somente consome mais CPU como acaba tendo um resultado bastante inferior àquele que seria de se esperar do chip gráfico.

Algumas placas atualmente apresentam a capacidade de liberar a CPU desses pesados cálculos geométricos, como é o caso dos chips geForce 256 da NVIDIA e do Savage 2000 da S3. Dessa maneira, há a possibilidade de obter melhor desempenho em jogos com CPU's mais lentas. Mas há também um grande aumento no tráfego de informações entre a CPU e a placa de vídeo devido à presença dos dados para esse cálculos, sendo essencial a utilização da interface AGP para isso.

6) Continuando com a interdependência entre processador e CPU, devemos, ao comprar uma placa gráfica, procurar uma que tenha boa escalabilidade, ou seja, que se desempenhe bem com processadores mais potentes. Como vimos no tópico anterior, o processador 3D depende dos dados fornecidos pela CPU, assim, numa placa 3D lenta, pode ocorrer de a CPU fornecer os dados para o processador gráfico e, enquanto este renderiza a imagem, a CPU finaliza os cálculos para o quadro seguinte, mas não pode entregar à placa 3D porque esta ainda não acabou de trabalhar com o quadro anterior, desta forma a CPU fica "parada", esperando até que o processador gráfico possa receber os dados. Imaginemos agora o contrário, um velocíssimo chip gráfico operando com uma CPU que não é capaz de fornecer os dados na velocidade com que ele pode operar. Se vc tiver uma veloz placa 3D é possível que ela receba os dados da CPU, renderize a imagem, faça a transformação para o sinal analógico VGA e a imagem seja apresentada na tela e o processador gráfico fique então "parado", apenas esperando os dados do novo quadro serem enviados pela CPU, ou seja, aqui foi o processador gráfico que acabou seu trabalho primeiro e a CPU não é capaz de oferecer dados em velocidade suficiente para explorar todo seu potencial. Este é o exemplo de um chip gráfico escalável. Se vc tem uma placa de vídeo com um chip gráfico altamente escalável, ao fazer o upgrade da sua CPU, de um Pentium 200 para um PII 300, por ex., vc vai ganhar em taxa de quadros (FPS), pois a placa de vídeo não será gargalo ao desempenho. No primeiro caso foi citado um exemplo de placa de vídeo não escalável, naquele caso o upgrade de CPU pouco ou nada acrescentaria em termos de frame rate.

7) Outra bobagem comumente repetida por leigos é: "coloquei uma placa de vídeo tão rápida que está difícil de jogar de tão veloz que o jogo ficou". Isto não existe! Essas pessoas confundem um maior frame rate com uma maior velocidade de andamento do jogo. Todos os jogos atuais têm seu andamento dado pelo real time clock, e não pela velocidade do hardware. Isto se fez necessário uma vez que um jogo programado para um 386 tinha a sua jogabilidade inviabilizada em um 486 (eu mesmo tenho um Pac-Man de utilização impossível em um Pentium), e não só isto os jogos em rede seriam impossíveis, uma vez que, num jogo de corrida de carros, por exemplo, ganharia aquele que tivesse o computador mais veloz. Assim, desde que TODOS os jogos 3D possuem seu andamento balizado pelo real time clock os jogos definitivamente NÃO ficam mais rápidos por vc estar usando um hardware mais veloz, o que acontece é uma maior fluidez de imagens que, pelo contrário, até facilita o controle. Imaginemos um jogo de corrida em que o veículo pilotado pelo jogador está se deslocando na velocidade de 100 m/s, imaginemos que o seu hardware esteja gerando imagens numa proporção de 50 fps, assim, a cada frame o veículo será apresentado com um deslocamento de 2m, em média, em relação à frame anterior, ao final de um segundo terão sido apresentadas 50 frames e o veículo terá se deslocado os 100m. Se vc rodar este mesmo jogo em um hardware 5 vezes mais lento este hardware terá condições de apresentar apenas 10 fps, mas como o andamento do jogo é controlado pelo real time clock, cada frame irá apresentar um deslocamento médio do veículo de 10 m em relação à frame anterior, mas ao final de um segundo o veículo terá se deslocado exatamente os mesmos 100 metros que se deslocou no hardware mais rápido, apenas com uma menor fluidez de imagens já que com apenas 10 fps a movimentação fica semelhante àqueles filmes de cinema mudo e com 50 fps a fluidez da imagem assemelha-se às de um cinema moderno (60 fps). É bom lembrar que com um fps de 20 já se têm uma boa fluidez e com 30 já se torna quase impossível percebermos alguma falta de continuidade. Portanto, tudo é ilusão sua, o andamento de um jogo não fica mais rápido por usar um hardware mais veloz, nem a jogabilidade fica prejudicada, pelo contrário, já que com um maior frame rate vc acompanha mais amiúde o desenrolar do jogo, imaginemos no caso da nave que se desloca a 100 m/s se vc usasse um hardware que te desse um fps de 5 apenas, a cada frame vc estaria 20 metros adiante da anterior, um obstáculo pode aparecer repentinamente e vc nem perceber, já com um fps de 50 a nave estaria apenas 2 metros a frente da anterior, dando maiores possibilidade de visualização do obstáculo.

É muito difícil atualmente chegar a uma decisão sobre "qual a placa de vídeo 3D mais rápida", já que isto depende de diversos fatores, desde o tipo de jogos que vão ser utilizados (e a API gráfica utilizada por eles) até a maturidade dos drivers disponíveis para a placa. A melhor recomendação nesse caso é visitar a maior quantidade de sites sobre hardware possível, e comparar os diversos testes feitos com as diversas placas. Existem diversos links na seção e "Links" aqui da Hard & Cia.

Para finalizar, a cada dia que passa a importância da interface AGP (principalmente nos modos mais rápidos, como o 2x e principalmente mais recentemente o 4x) cresce. Com o aparecimento de jogos que utilizam cada vez mais e maiores texturas, como Quake III e o Unreal Tournament, além da nova geração de placas com capacidade de processar Transforms & Lighting, a velocidade de comunicação entre os chips gráficos e o resto do sistema (CPU, memórias) está se tornando um gargalo muito grande. Quando mais largura de banda estiver disponível para a placa de vídeo, melhor serão os resultados nas aplicações 3D.

A importância do número de polígonos

Porque é tão necessário o aumento no número de polígonos para melhorar os efeitos 3D dos jogos? Porque alguns chamam os efeitos nas texturas, como Environment Bump Mapping de enganação e o aumento de número de polígonos como "realidade"? Não é tudo "enganação"? Afinal as telas dos monitores têm apenas duas dimensões.

Você também enxerga basicamente em 2D, afinal você não tem vários olhos que saltam do rosto posicionando-se em diversos ângulos diferentes para que você tenha uma real noção tridimensional do objeto que está sendo visto. Isto é parcialmente contornado pela visão estereoscópica que temos, que vê os objetos sob dois ângulos ligeiramente diferentes. É por isto que muitas vezes somos enganados por truques de ilusão de ótica. O que os efeitos 3d presentes nos jogos procuram fazer é proporcionar, através da tela bidimensional de um monitor, a mesma sensação de profundidade e, portanto, tridimensionalidade que nós temos ao usar nossa visão estereoscópica no mundo real, enfim, uma ilusão de ótica. Para tal o aumento do número de polígonos é importante, como veremos nos parágrafos seguintes.

Para tentar alcançar seu objetivo vários recursos são usados e todo o mundo virtual de um jogo 3D passa-se de fato em um espaço tridimensional, todos os objetos criados são relações matemáticas ( sim, relações e não funções porque um ponto em um dos planos pode ter mais do que uma imagem nos outros planos) . Da mesma forma que um jogo 2d é criado baseando-se apenas em ordenada e abcissa, na verdade resume-se ao primeiro quadrante, o jogo 3D é feito mediante cálculo com 3 eixos. A tal função de transformação presente nos modernos chipsets 3D é justamente o trabalho de transformar os polígonos do espaço 3D em polígonos posicionados em espaço bidimensional, de somente ordenada e abcissa. Afinal, as telas dos monitores são bidimensionais, nos chipsets das antigas gerações quem fazia este trabalho de transformação era o processador central.

Mas aí vem a pergunta: por que usar cálculo em 3d então? Porque não faz-se tudo em um plano e, como conseqüência, os jogos ficariam muito mais rápidos?

Simplesmente porque precisa-se da criação dos objetos no espaço 3D para saber como o objeto será visto por você em um determinado ângulo. Ou seja, como os polígonos deverão aparecer para você em 2D. Neste momento você está vendo a tela do seu monitor, se você chegar o rosto apenas um pouco para o lado você verá parte da lateral do seu monitor. Mesmo que seu monitor seja um cubo perfeito o que você está de fato vendo são dois trapezóides , um bem maior, que é onde está a tela, e um outro de pequena altura, que é a parte lateral do monitor. Observe que o monitor existe no espaço 3D, mas o que você vê de fato são dois polígonos bidimensionais, e, no caso da vista da lateral nem a visão estereoscópica está ajudando porque somente um olho está de fato vendo esta parte da lateral. Mas como você conhece de fato o objeto, já o viu sob inúmeros ângulos você tem uma noção exata da profundidade. O que os jogos 3D e a transformação para 2d fazem é aproximadamente isto, criar objetos em 3d e depois transformar para 2D formando esta imagem com polígonos feitos na mais exata proporção possível em relação ao ponto de vista do observador, que está previsivelmente à frente do monitor. Buscando dar a mesma sensação de profundidade que se tem em um mundo real. A figura abaixo ilustra este processo, observe que o olho do observador está enxergando o cubo sob um determinado ponto de vista, no canto direito mostra como deverá ser visto o cubo em 2D pelo observador (como se fosse desenhado em uma folha de papel) mas mantendo a perspectiva tridimensional. Observe que o polígono V1, V2, V3, V4 nada mais é que um trapézio 2D, outro trapézio é o polígono V1, V4, V5, V6 este com o lado menor para baixo ( V5, V6 ). Mas que no contexto são faces do cubo desenhados mediante uma perspectiva tridimensional.

Porque então com mais polígonos é melhor? No caso de superfícies lisas, como a do citado monitor, não há muitos contornos, mas imaginem um rosto humano, a quantidade de polígonos para se reproduzir razoavelmente, em um mundo matemático, este rosto é enorme (para ser absolutamente real haveria necessidade de um número infinito de polígonos com arestas tendendo a zero). Com as atuais placas muitas vezes as cabeças humanas não passam de um paralelepípedo, com a face completamente chata. Para contornar tal inconveniente produziram-se técnicas de recobrir a face com texturas cada vez mais sofisticadas. Assim, ao se olhar um personagem de frente você vê sua boca e nariz mas nunca as orelhas. ao olhar de lado você vê uma orelha, mas não vê o relevo do nariz, e assim por diante. Para procurar dar mais realismo as texturas foram melhorando e o "environment bump mapping" é uma destas técnicas. Ou seja vendo este rosto de frente você vê sempre um nariz simplesmente desenhado e pintado sobre uma superfície plana, não há sombra dele não interessa onde esteja a fonte luminosa. Com um número maior de polígonos não só o nariz como uma eventual verruga no rosto "realmente" existirão. Isso significa que não terá que existir efeito de textura nenhum no nariz, para "fingir" que tem um nariz ali, a mesma textura usada no rosto será também a do nariz. Ao mudar ligeiramente o ângulo de visão você verá esta nariz sob outro ângulo e haverá sombra dele incidindo de forma diferente sobre o rosto. Ao olhar o personagem de frente você verá as orelhas e saberá inclusive se elas são de abano ou não. Ao olhar para uma porta no cenário ela não será apenas uma pintura sobre a superfície plana da parede, existirá "de fato" uma maçaneta e uma moldura da porta, com relevo, mudando a forma como é refletida a luz a cada pequeno movimento que você faz, é isto que te dá a sensação 3d mais próxima da realidade.

Enfim, ao se transformar para 2d uma imagem com um número maior de polígonos um número muito maior de detalhes das formas e das sombras serão vistos, dando uma sensação muito maior de realidade.

Aurélio e Marcelo Vanzin



Hard&Cia - 2001
Dúvidas, sugestões e críticas gerais? Hard&Cia Mail