Passar para o conteúdo principal

Como The Crew foi convertido para a PlayStation 4

E o porquê do PC ser tão importante para a chegada da nova geração.

O Ubisoft Reflections terminou o segundo dia da conferência Develop com uma conversa intrigante, chamada de "Truques e dicas para converter para a Próxima Geração". Para o Digital Foundry, é uma apresentação obrigatória principalmente porque a vasta maioria - senão todos - os jogos multi-plataformas que iremos jogar na Xbox One e PlayStation 4 no final do ano derivam de código PC, precisando de uma conversão para o novo equipamento.

É uma situação intrigante, especialmente se jogas num PC razoavelmente poderoso. Outrora o teu equipamento era um alvo de conversões, por vezes com pouco esforço. Agora, o PC é a plataforma líder. A E3 2013 demonstrou vigorosamente que a disponibilidade de equipamento de consola em forma final para produção para os estúdios é excecionalmente limitada, muitos jogos destinados a consolas estavam a correr em sistemas PC "alvo". Faz sentido que o PC assuma o papel principal durante o desenvolvimento, simplesmente porque os jogos demoram mais de dois anos a serem desenvolvidos e equipamento de consola não estava disponível até recentemente.

The Crew, o altamente promissor jogo de corridas para a nova geração da Ubisoft, estreou-se na E3, a primeira demo gameplay correu em equipamento PC. É um novo projeto criado por membros que trabalharam em Test Drive Unlimited e que formaram um novo estúdio - o Ivory Tower - e estão a produzir a versão PC do jogo (e, suspeitamos, a versão Xbox One). No entanto, o que é curioso aqui é que é a equipa de tecnologia no Ubisoft Reflections que está a cargo da versão PS4, enquanto outros membros do estúdio de Newcastle no Reino Unido produzem conteúdo adicional para o jogo - especificamente, som, enredo, desafios de habilidades e espantosamente, todo o estado do Texas.

Para os trabalhadores PS4, estão perante uma tarefa que parece bem onerosa, o estúdio pega no massivo código gerado por um estúdio diferente, o objetivo inicial é simplesmente compilá-lo no novo equipamento Sony e tentar ter algum tipo de imagem no ecrã.

"Começamos com uma grande base de código - haviam cerca de 12,000 ficheiros fonte. E começamos com uma versão Windows 64-bit do motor usando D3D11," diz o programador especialista no Reflections, Dr. Chris Jenner.

"É importante começar com uma versão 64-bit porque, obviamente, o equipamento [PS4] é 64-bit portanto é bom ter esses problemas 32-bit/64-bit resolvidos antes de começares a preocupar-te com as especificidades da plataforma. O objetivo inicial do nosso trabalho foi pôr a versão PS4 em paridade de funcionalidades com a versão Windows."

A Sony promoveu muito a acessibilidade do equipamento PS4, e um elemento chave disso seria a qualidade da cadeia de ferramentas - a série de programas usados para criar código compilado. Para os programadores PS4, o uso do ambiente estabelecido, o Visual Studio, prova ser um benefício chave, e a extensão à qual a Sony reconheceu e apoiou criadores de jogos cross-platform é auto-evidente. Existem até opções dentro do compilador da Sony adicionadas especificamente para aumentar a compatibilidade com a concorrente Microsoft usada na compilação de jogos DirectX 11.

"Uma coisa que definitivamente ajudou para conseguir pôr o jogo a funcionar foi que o motor usa muito middleware. Apoiantes middleware tem estado muito ativos na PS4, portanto existem versões de todo o middleware que queríamos," continua Jenner.

"É preciso algum trabalho e tempo para integrar consoante as SDKs mudam para ter versões novas do middleware que procuras, por vezes isso pode sentir-se como um trabalho a tempo inteiro, mas a plataforma vai assentando, as mudanças SDK tornam-se menos significantes e perto do lançamento torna-se num problema menor."

"Começamos com um grande código base - existiam cerca de 12,000 ficheiros...o objetivo inicial do nosso trabalho foi conseguir paridade de funcionalidades entre a versão PS4 e Windows."

O walkthrough E3 para The Crew, demonstrado no evento a correr num PC. Comum com a maioria dos multi de próxima geração, o PC assumiu a liderança no período de desenvolvimento.Ver no Youtube

Mais crucial é como os 8GB de RAM na PS4 são usados. Esta piscina unificada é uma vantagem significante sobre plataformas como PC e PS3, onde a CPU e RAM gráfica assumem a forma de duas piscinas de memória completamente separadas. A PS4 opera um sistema no qual a memória é reservada ou para a CPU ou para a GPU, usando duas entradas de memória separadas.

"Uma é chamado de Onion, a outra de Garlic. A Onion está mapeada pelas caches CPU...isto permite à CPU ter um bom acesso à memória," explica Jenner.

"A Garlic contorna as caches CPU e tem uma largura de banda muito alta adequada para programação de gráficos, que vai diretamente para a GPU. É importante pensar sobre como estás a distribuir a tua memória baseado no que vais colocar lá."

Jenner não entrou em detalhes sobre os níveis de largura de banda disponíveis para cada entrada devido a acordos de confidencialidade, mas baseado na nossa informação a GPU tem acesso completo aos 176GB/s de largura de banda dos GDDR5 da PS4 via Garlic, enquanto a Onion fica com uma quantidade bem menor, algures entre os 20GB/s, esta (análise ExtremeTech à APU PS4 é uma boa leitura. Seja qual for o número preciso para a área CPU mais constrita, Jenner apenas confirmou que é "suficiente". Otimizando a versão PS4 de The Crew assim que a equipa conseguiu ter a compilação de código necessária para trabalho sério na decisão de quais dados encaixariam melhor em cada área da memória.

"O primeiro problema de performance que encontramos não foi na distribuição correta da memória...portanto a entrada Onion é muito boa para coisas do sistema e pode ser acedida pela GPU. A Garlic é muito boa para recursos de renderização e pode enviar muitos dados para a GPU," revela Jenner.

"Um problema que tivemos foi que tínhamos alguns dos nossos shaders colocados na Garlic mas o constante código de escrita tinha na verdade que ler algo dos shaders para compreender o que tinha que estar a escrever - e como isso estava na memória Garlic, era uma leitura muito lenta porque não está a passar pelas caches CPU. Esse foi um problema que tivemos que resolver bem cedo, assegurando que tudo está dividido nas corretas regiões de memória caso contrário pode abrandar-te muito mesmo."

Portanto elementos como a pilha principal do sistema (que contém o depósito principal para variáveis de jogos), dados principais para shaders, e alvos de renderização que precisam ser lidos pela CPU estão atribuídos à memória Onion, enquanto elementos mais focados na GPU como dados vértex e de texturas, código de shader e a maioria dos alvos de renderização ficam na ultra-abrangente memória Garlic.

Devido a acordos de confidencialidade, o Reflections não aprofundou muito a relação das entradas Onion e Garlic com o resto do processador da PS4, mas suspeitamos que o diagrama em bloco do ExtremeTech está bem perto do real. Notem que a PS4 tem dois conjuntos CPU Jaguar para oito núcleos no total, dois deles reservados pelo sistema operativo.

Um problema mais crucial é que, apesar da cadeia de ferramentas PS4 estar desenhada para ser familiar com os que trabalham em PC, o novo equipamento Sony não usa a API DirectX, portanto a Sony forneceu duas feitas por si.

"As APIs gráficas são novas - não tem qualquer legado, portanto são limpas e bem pensadas e condizem muito bem com o equipamento," diz Simon O'Connor, programador especializado no Reflections.

"No nível menor existe uma API chamada GNM. Isso dá-te quase controlo total da GPU. Dá-te muito potencial poder e flexibilidade sobre como programas as coisas. Conduzir a GPU nesse nível significa mais trabalho."

A Sony falou sobre a sua API de baixo nível na GDC, mas não revelou o nome, portanto pelo menos agora sabemos como se chama (o equivalente PS3 é GCM já agora) mas e quanto ao código "wrapper" fornecido pela Sony que supostamente torna mais simples o desenvolvimento?

"A maioria das pessoas começa com a API GNMX que rodeia a GNM e gere os detalhes mais esotéricos da GPU de uma forma que é muito mais familiar se estás habituado a plataformas como D3D11. Começamos com uma de alto nível mas eventualmente passamos para a API de baixo nível porque se adapta um pouco melhor ao nosso uso," diz O'Connor, explicando que apesar de ser muito mais simples trabalhar com GNMX, isto remove muito do acesso personalizado à GPU PS4, e também causa um significante impacto na CPU.

Foi colocado muito trabalho na passagem para a GNM de nível menor, e no processo a equipa de tecnologia descobriu quanto trabalho o DirectX faz em fundo em termos de colocação de memória e gestão de recursos. Passar para GNM significou que os programadores tinham que assumir o fardo ali, como explica O'Connor:

"The Crew usa um subconjunto do leque de funcionalidades D3D11, portanto esse subconjunto é na maior parte facilmente portável para a API PS4. Mas a PS4 é uma consola e não um PC, portanto muitas coisas que são feitas por ti pelo D3D no PC - tens que o fazer tu próprio. Significa que existe mais 'Faz tu próprio' mas dá-te muito mais controlo sobre o que podes fazer com o sistema."

Outra área chave do jogo são os seus shaders de pixel programáveis. A experiência do Reflections sugere que a PlayStation Shader Language (PSSL) é mesmo muito similar ao padrão HLSL no DX11, com subtis diferenças que foram eliminadas na maior parte com macros pré-processamento e o que O'Connor chama de "procura de expressão regular e substituição" para diferenças mais complicadas.

"As SDK estão sempre a mudar...Estamos perto da versão final. Não esperamos grandes mudanças na performance, apenas a finalização das funcionalidades."

No evento E3 da Ubisoft, a versão PC estava a correr a 30fps, mas a primeira compilação do código base PS4 a funcionar não estava tão boa, operava perto dos 10fps.

"As SDK PS4 vem com uma bela ferramenta que traça o perfil CPU que usamos muito cedo e que se tornou muito útil para descobrir onde estavam os engarrafamentos de alto nível no nosso código," diz Chris Jenner, referindo-se à ferramenta da Sony conhecida como Razer.

"O nosso jogo está arquitetado para ter duas linhas CPU principais, uma delas corre a simulação, a outra desenha a cena e correm em paralelo. Ambas as linhas podem-se forçar para processadores extra para correr montes de trabalho em paralelo."

Talvez não surpreenda mas foi a linha do renderizador que se tornou no engarrafamento, particularmente em termos da constituição dos shaders de pixeis programáveis - as "constantes" foram o principal problema. As constantes são os dados fornecidos ao shader que não são vértices ou texturas - elementos como a posição do objeto, a cor da luz solar ou a posição exata dos ossos num objeto animado pelo seu esqueleto. Um shader precisa de tudo entre dezenas a centenas destas constantes, e pesando a quantidade de trabalho shader num jogo moderno, pode ser um engarrafamento significativo.

"Tivemos algumas soluções para corrigir isto, uma delas foi reduzir o tempo gasto na preparação das constantes na linha do renderizador e a outra foi equilibrar a carga ao longo de núcleos diferentes ao aplicar multi-threading à nossa criação de ordens buffer," diz Jenner, revelando também que isto é muito mais fácil do que na PS3 devido ao facto que todos os núcleos CPU terem acesso à memória principal.

"Outra coisa que fizemos foi olhar para um cenário constante. GNMX - o motor gráfico da Sony - tem uma componente chamada de Constant Update Engine que gere a preparação de todas as constantes que precisam ir para a GPU. Isso era mais lento do que gostaríamos. Ocupava muito tempo à CPU. Agora a Sony melhorou isto, portanto nas versões mais recentes das SDK existe uma versão mais rápida da CUE, mas decidimos que iríamos lidar nós com isto porque temos muito conhecimento sobre como o nosso motor acede aos dados e quando as coisas precisam ser atualizadas mais do que a implementação de propósito geral...portanto podemos mesmo tornar isto mais rápido que a versão que tínhamos na altura."

No geral, de uma perspetiva sobre a performance, parece que as SDK da Sony estão onde precisam estar agora, em contraste com a equivalente Microsoft, onde os técnicos ainda estão a trabalhar em melhorias muito significativas que vão melhorar a taxa de transferência da GPU. Perguntamos à equipa do Reflections se esperam que os seus esforços de otimização sejam ajudados pelas versões revistas e melhoradas do ambiente de desenvolvimento da Sony. Essencialmente, o "driver" GPU ainda está a ser otimizado?

Antes de começar a apresentação do Reflections, o estúdio ilustrou do que se trata The Crew ao voltar a passar este trailer E3. É muito fixe e vale a pena verem se ainda não o fizeram.Ver no Youtube

"As SDK estão sempre a mudar, [mas] muda menos rapidamente que há seis meses atrás," diz Chris Jenner.

"Estamos perto do estado final, não esperamos grandes mudanças na performance, apenas a finalização das funcionalidades. É muito mais estável que no início. Há algum tempo que não temos que fazer quaisquer mudanças."

Apesar da conversão básica estar completa, a equipa no Ubisoft Reflections aumenta agora o seu staff para completar o jogo PS4 a tempo do lançamento nos primeiros quatro meses de 2014, mas o esforço principal em termos de engenharia para levar The Crew para a PS4 foi feito em seis meses com uma equipa de duas ou três pessoas. No geral, o Reflections sentiu que o processo de converter o código base PC foi bem simples e direto.

O que não descobrimos foi como está a versão Xbox One, ou quem a está a produzir. Apostamos no estúdio Ivory Tower em conjunto com a versão PC, devido ao uso da API DX11 nas duas plataformas. Mas a One e a PS4 tem muito em comum de uma perspetiva arquitetural, e as ficam por responder as questões que temos sobre se colaboração entre equipas de consolas está a resultar em otimizações comuns às duas consolas.

Simon O'Connor did disse que o Reflections considera que o seu trabalho em The Crew irá acabar por ser muito mais do que uma simples conversão com todas as funcionalidades. É uma oportunidade para explorar do que a nova consola é capaz, e existe uma sensação que o equipamento gráfico da PS4 não está a ser completamente explorado.

"A GPU da PS4 é muito programável. Existe muito poder ali que ainda não usamos. Portanto o que queremos fazer são algumas coisas específicas da PS4 para a nossa renderização mas dentro do racional - é um jogo multi portanto não podemos fazer muito que seja específico PS4," revela ele.

"Existem duas coisas que queremos investigar: computação assíncrona onde podemos mesmo correr trabalhos computacionais em paralelo...E [também] ter acesso de baixo-nível ao equipamento de processamento-fragmentado que nos permite fazer coisas bem interessantes com o anti-aliasing e alguns outros efeitos."

O processo padrão de conversão no início da era Xbox 360/PS3 parecia ser um caso de colocar um alvo numa plataforma líder e depois remover funcionalidades para conversões subsequentes, ou em alternativa sofrer um impacto na performance. Apesar dos títulos multi da próxima geração mostrarem as consolas abordar um alvo ao invés de um estatuto de plataforma líder, existe claramente a compreensão que as novas máquinas são capazes de mais, e isso será ganho ao explorar funcionalidades específicas por plataforma. Se o Reflections pode mesmo alcançar paridade em funcionalidades com a versão PC, e depois ajustar o código para se adaptar às forças da "arquitetura PC super-poderosa" de Mark Cerny, The Crew deverá ser um jogo a ter em atenção.

Lê também