terça-feira, 31 de julho de 2012

Como é desenvolver jogos para console Um programador veterano responde?

A indústria dos games não é o que costumava ser. Como jogador, você provavelmente sabe disso. Mas como será que as mudanças dessa indústria afetam quem faz os jogos que chegam até você? 
Cory Bloyd é um programador veterano que atualmente está na Munkyfun, mas que já trabalhou em feitos grandiosos como ajudar a LucasArts no desenvolvimento da engine que foi usada na série The Force Unleashed. Ontem ele escreveu uma pequeno artigo no Reddit descrevendo sua experiência desenvolvendo jogos, explicando como tudo mudou da época do PS1 até hoje. 
É basicamente um texto opinativo e bastante direto, mas é isso que o torna interessante: parte do que está escrito ali é compreensível mesmo para quem não tem um pós-doutorado em engenharia da computação ou coisa do tipo. Confira: 


PlayStation 1: Tudo era simples e direto. Com alguns anos de dedicação, qualquer pessoa poderia entender o PS1 inteiro, até o seu nível mais básico. Comparado com o que você podia fazer em PCs da época, era algo surpreendente. Mas, a cada passo que você avançava, você tinha que parar e dizer "sério? Eu tenho que fazer isso desse jeito? Mas que droga. OK, tudo bem? me dê algumas semanas." E não havia nenhuma espécie de depurador [debugger]. Você lançava sua compilação e torcia para tudo dar certo. 


N64: Tudo funcionava razoavelmente bem. Na maior parte do tempo, era fácil e flexível. Você nunca sentia que estava usando todo o potencial do console. Mas tudo bem, porque qualquer esforço meia-boca geralmente ficavaa mais bonito do que a maioria dos jogos de PS1. Cada megabyte no cartucho custava muito dinheiro. Havia um depurador, mas ele vinha com bugs completamente aleatórios, como erros de determinação na janela de visualização (exibir suas variáveis reinterpretando os bits com o tipo que foi declarado pouco antes da variável atual) 


Dreamcast: A CPU era estranha (Hitatchi SH-4). A GPU era estranha (um antecessor dos chips PowerVR dos iPhones modernos). Existia um monte de recursos que você não sabia como usar. A Microsoft quase considerou configurá-lo como uma caixa para o DirectX no estilo de um PC, mas não avançou com a ideia. Isso não teria funcionado, de qualquer maneira. Parecia ter muito potencial, mas o PS2 seria tão melhor! 


PS2: Você recebia uma pilha de 30 centímetros de altura com manuais escritos por engenheiros de hardware japoneses. A primeira vez que você lia essa pilha, nada fazia sentido. Na segunda vez, o livro 3 fazia um pouco mais de sentido por causa do que você tinha aprendido no livro 8. A máquina tem 10 processadores diferentes (IOP, SPU1&2, MDEC, R5900, VU0&1, GIF, VIF, GS) e 6 espaços de memória diferentes (IOP, SPU, CPU, GS, VU0&1), e todos trabalhavam de maneiras completamente diferentes. Havia tantas coisas maravilhosas que você podia fazer, mas tudo exigia muito malabarismo. Fazer o primeiro triângulo aparecer na tela custou o trabalho de meses de algumas equipes porque se tratava de rotear comandos através de diversos processadores sem nenhum feedback do que estavam fazendo de errado até corrigir cada passo do processo. Se você estivesse disposto a adaptar seu jogo para se adequar à máquina, você conseguia obter resultados impressionantes. Havia um depurador para o CPU principal (R5900) que funcionava muito bem. Para o resto dos processadores, você tinha que escrever códigos sem bugs. 


GameCube: Eu não trabalhei muito com o GC. Ele parecia realmente flexível. Você conseguia fazer qualquer coisa, e nada seria extremamente ruim ou bom. A GPU não era muito rápida, mas as suas capacidades foram tragicamente subutilizadas em comparação com o Xbox. A CPU tinha uma RAM com uma latência incrivelmente baixa. Qualquer estrutura de dados complicada que você pudesse imaginar se daria muito bem lá (em teoria). Bastaria fazer. Mas mais da metade da RAM ficava presa por trás de uma barreira de alta latência. Então, você tinha que organizar os seus dados manualmente e separá-los entre dados ativos e de estoque. Ele tinha um SIMD meia-boca que fazia 2 floats de cada vez, em vez de 1 ou 4. 


PSP: Não mexi muito com o PSP também. Ele era pensado como uma versão reduzida do PS2, mas parecia mais com um PS1 melhorado. Eles tentaram fixar algumas partes para torná-lo menos chato de trabalhar, mas essas partes ficaram estranhas em relação ao projeto original. Tendo praticamente a mesma velocidade do rasterizador de um PS2 com uma resolução bem menor, significava que você não precisava se preocupar com pixels se misturando. 
Xbox: Parecia com um PC. Havia alguns truques que você podia usar para melhorar o desempenho. Mas, na maioria das vezes, já era o bastante ter uma única especificação de PC para desenvolver. O depurador funcionava! Ele realmente funcionava! O investigador de Análise do Xbox (PIX) era uma coisa divina. 


Xbox360: Parece com um PC um pouco mais poderoso, até você começar a cavar. A GPU é excelente, exceto pela EDRAM limitada, que obriga você a desenhar a cena duas vezes para cumprir os requisitos de anti-aliasing. E há muitos registros de SIMD! 4 floats x 128 registros x 6 bancos de registros = 12.000 registros! Você recebe o DX9 e tudo funciona como deveria. Mas, se você fuçar, encontra maneiras melhores de fazer as coisas. Eventualmente, o seu código não se parece nada com o de um PC com DX9, e funciona tão melhor do que antes! E o depurador é impressionante! Eu te amo, PIX! 


PS3: A caixa de 40 quilos aparece na nossa mesa com uma cópia impressa das instruções (em 24 passos) de como ligá-la pela primeira vez. Todo mundo tenta, mas ninguém consegue. Eventualmente, um cara consegue e configura todas as outras máquinas. Só existe uma CPU. Ela parece ser capaz de fazer tudo, mas não é. Os SPUs parecem ser realmente impressionantes, mas não para qualquer coisa que você ou qualquer outra pessoa vá fazer com eles. O depurador da CPU funciona muito bem. Não há depurador para os SPUs. Não havia nada parecido com o PIX no começo, mas, depois de um tempo, alguns desenvolvedores da Sony devem ter se cansado e fizeram um depurador no estido PIX para o GPU. A GPU é muito, muito decepcionante? A maioria das pessoas tenta trabalhar apenas com a CPU, mas não consegue lidar com a carga de trabalho. Algumas pessoas vão fundo nos SPUs, e eles são bem rápidos! Infelizmente, quem tenta acaba descobrindo que os SPUs precisam ser quase 100% dedicados a superar as fraquezas da GPU. 


Parece que o processo de desenvolvimento para os consoles se torna cada vez mais um reflexo das nossas experiências com eles, como jogadores. Pegue o PS3, por exemplo: se você já se perguntou por que demorou tanto tempo para os desenvolvedores começarem a fazer um jogo funcionar tão bem nele quanto no 360? Parece que aí está a resposta.

Nenhum comentário:

Postar um comentário