Placas 3D: Physics e PhysX

Placas 3D: Physics e PhysX

Uma GPU enxerga uma cena 3D de uma maneira muito diferente de uma pessoa. Enquanto você enxerga pedras, carros, projéteis, fumaça e explosões, a GPU enxerga apenas polígonos e shaders, que não interagem entre si da mesma maneira que no mundo real.

A GPU não sabe que uma pedra deve se espatifar ao se chocar contra o solo (em vez de penetrá-lo e ficar com a ponta para fora), nem que um projétil deve abrir um buraco em uma parede de tijolos, em vez de simplesmente atravessá-la ou desaparecer ao atingi-la. Ela não sabe nem mesmo que os membros dos personagens não devem atravessas paredes, o que leva as tantos glitches que vemos em jogos.

Para a GPU, uma cena 3D é composta de polígonos: formas geométricas sem massa, que por ventura são usadas para desenhar objetos. Como a placa não enxerga objetos, mas sim apenas contornos e texturas, ela não sabe como fazê-los interagir de maneira realística.

Para adicionar uma certa camada de realidade, os desenvolvedores incluem scripts pré-programados, que adicionam alguns efeitos específicos. São eles os responsáveis por deixar buracos em paredes quando você atira nelas, ou deixar o chão preto depois que uma bomba explode, por exemplo. Eles resolvem alguns problemas, mas consomem muito tempo de desenvolvimento e são bastante limitados. Seria necessário um brutal volume de trabalho para criar algo próximo de um ambiente real (onde você pode mover objetos, destruir paredes, ver objetos recocheteando de maneira realista, etc.) usando scripts, e mesmo assim o resultado final dificilmente seria convincente.

A resposta para o problema são os cálculos de física (Physics), que consiste em calcular as trajetórias de fragmentos, fazendo com que eles interajam de maneira realística com o ambiente. Usando cálculos de física, uma explosão pode resultar em estilhaços recocheteando nas paredes e atingindo os personagens (em vez de uma simples nuvem de fumaça), paredes podem ser destruídas, estilhaços de vidro e outros materiais se comportam de maneira realística e assim por diante:

warmonger_large

A primeira iniciativa de acelerador dedicado (o PPU, ou Physics Processing Unit) veio por parte da AGEIA, que em 2005 lançou o “Physx”, em conjunto com uma API própria (também chamada de Physx) para a programação dos efeitos. Embora fosse um chip produzido usando uma técnica de 130 nm, o acelerador possuía 125 milhões de transístores, capaz de processar 20 bilhões de instruções por segundo, bastante poderoso para a época.

Ele chegou a ser vendido na forma de placas PCI produzidas pela Asus, BFG e ELSA, mas acabou fazendo pouco sucesso devido ao custo (a Asus PhysX P1, um dos poucos modelos de placas baseadas no chip, custava nada menos que US$ 270) e ao pequeno número de jogos com suporte à tecnologia. Para complicar, os poucos títulos utilizavam o hardware apenas para aprimorar efeitos já existentes de explosões e estilhaços (como no caso do Ghost Recon: Advanced Warfighter) e não para implantar melhorias na mecânica ou na jogabilidade.

physx_html_m6bbd802

Essencialmente, a AGEIA enfrentou um problema do ovo e da galinha, com os desenvolvedores esperando até que existisse uma grande base de usuários e os usuários esperando até que existisse um grande número de títulos com efeitos realísticos.

Apesar do fracasso das placas da AGEIA, a ideia do uso de cálculos de física para melhorar o realismo dos jogos foi lentamente ganhando adeptos, principalmente através do Havok (desenvolvido pela empresa de mesmo nome), um middleware que permite processar efeitos simples usando o processador. Ele é o sistema usado pela maioria dos jogos atuais com suporte a Physics, incluindo os títulos baseados na Source Engine, como o Half Life 2, CS Source, Left 4 Dead e outros. Neles, você pode notar a presença da opção relacionada ao uso de Physics, que pode ser desativada para melhorar o desempenho em PCs com processadores single-core.

A Havok começou como uma empresa independente, mas ela logo despertou o interesse da Intel, que viu o uso de Physics como um incentivador para a venda de processadores quad-core, que tipicamente não ofereciam grandes ganhos em jogos, devido à natureza single-thread da maioria dos títulos.

A compra da Havok pela Intel levou ao cancelamento do Havok FX, uma nova versão do middleware que seria baseada no uso da GPU. Como pode imaginar, a Intel estava mais interessada em otimizar a API para uso em processadores (e no Larrabee) do que em desenvolver uma tecnologia que beneficiaria as concorrentes.

Isso deixou tanto a nVidia quanto a ATI de calças na mão, correndo o risco de verem suas GPUs perderem mais uma batalha para as CPUs multicore. A resposta veio com a compra da AGEIA pela nVidia (em 2008), que absorveu a tecnologia e adaptou o PhysX para rodar sobre suas GPUs.

Em resumo, o PhysX permite que o desenvolvedor especifique como os objetos se comportarão ao colidirem, qual o efeito da gravidade sobre os estilhaços e assim por diante, deixando que a Engine se encarregue da maior parte do trabalho pesado. Existem muitas similaridades entre ele e o Havok (a começar pelo fato que que ambos servem para a mesma coisa), mas o fato de o PhysX utilizar a GPU para o processamento (arquitetura paralela) representa um grande ganho de desempenho em relação ao Havok, que é baseado no uso da CPU, especializada em processamento serial.

O grande asterisco em relação ao PhysX é que ele é integrado ao CUDA, que é por sua vez suportado nativamente apenas nas placas da própria nVidia (das GeForce 8xxx em diante). Isso não impede que os efeitos funcionem em PCs com placas da ATI, mas nesse caso o código passa a ser executado pelo processador e o desempenho é muito mais baixo.
Como pode imaginar, isso limitou a adoção do PhysX, mas pelo menos dessa vez ele passou a ser oferecido como um bônus, que funciona em qualquer placa que suporte o CUDA, desde que você esteja disposto a sacrificar parte do FPS em troca dos efeitos, ou se sinta tentado a ponto de adicionar uma segunda (ou terceira) placa para o processamento do PhysX.

Nos jogos atuais, o Havok e o Physics são ainda usados para efeitos simples, como explosões, movimentação realística para roupas e objetos específicas e movimentação de partículas, como uma opção mais elaborada ao uso de scripts. Entretanto, podemos imaginar que no futuro o conceito possa evoluir para a criação de ambientes interativos, onde você possa interagir com todos os objetos do cenário de uma maneira similar ao que temos no mundo real, explodindo paredes e movendo os objetos a esmo, diferente dos ambientes estáticos e indestrutíveis dos jogos atuais.

Existem muitas dificuldades em criar esse tipo de ambiente realístico, a começar pelo brutal poder de processamento necessário e pelo enorme trabalho manual necessário para programar cada aspecto das cenas, mas essa não deixa de ser uma possibilidade interessante para o futuro.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X