Programadores de Edge of Eternity preocupam-se com performances da Xbox One

Edge of Eternity está a ser programado por uma equipa Indie Francesa, e a equipa está preocupada com as performances da Xbox One.


A Midgar Studios é a equipa responsável pelo JRPG Edge of Eternity que quer trazer do PC para as consolas.

O desenvolvimento para PC correu sem problemas, e curiosamente, a conversão para a PS4 também correu bem, estando o jogo a correr a 1080p 30 fps.

Mas já a versão Xbox One… está a ser problemática, com a equipa a não conseguir passar dos 720p, 30 fps.

O motor usado é o Unity, um motor com suporte para a Xbox One e que a Microsoft até suporta e incentiva o seu uso oferecendo o add-on com as optimizações Xbox One gratuitamente a quem se escrever no seu programa Indie ID@Xbox para desenvolvimento na consola. É um motor potente capaz dos mais recentes efeitos gráficos e modular adaptando-se a todo o tipo de capacidades de Hardware, desde smartphones até PCs topo de gama.

A equipa em causa não é exactamente novata com o uso do Unity, com o seu CEO a afirmar que a equipa possui mais de 10 anos de experiência com o motor.

Actualmente, Edge of Eternity está a correr em FullHD na PlayStation 4 mas apenas a 720P na Xbox One. Tenho um enorme problema em correr o jogo na Xbox One, mas a versão da PlayStation 4 está verdadeiramente bem, a 30FPS (ambas as versões).

Naturalmente, perante estes factos, a questão sobre a possibilidade de se poder atingir os 900p na Xbox foi levantada, mas a resposta foi que não havia qualquer certeza.

Na realidade não sei. Estou dependente do Unity para coisas como essa porque já optimizei o jogo o mais que podia. Os meus artistas e eu colocamos-lhes enorme pressão para puxarem o motor ao limite, e estou a trabalhar com o Unity faz 10 anos, sendo este um dos jogos mais bonitos do Unity. A única parte não optimizada são as arvores, elas ficam muito bonitas no SpeedTree mas a implementação do SpeedTree no Unity é na realidade má. Se removesse as árvores iria correr extremamente bem, mesmo num computador mais fraco; Temos uma boa relação com a Unity pelo que estou confiante que isto se vai resolver no futuro, mas não sei dizer quando isso se vai passar.

Mas o que leva a que, apesar da má implementação, a PS4 corra o jogo a 1080p e a Xbox One a 720p? Naturalmente a questão da eSRAM surge e é colocada. É a eSRAM a causa do problema? A resposta foi algo surpreendente:

É o GPU. A placa gráfica é o real problema; mais do que isso, o jogo corre a 720p mas o mapa ainda não está completo. Penso que a PS4 irá aguentar-se, mas questiono-me sobre a performance na Xbox One. Espero que a Unity faça escolhas que mudem isso, porque seria muito triste ter de fazer mudanças como descer o nível de detalhe, o que seria muito triste a nível de criatividade.

A equipa quer ainda utilizar o DirectX 12 pois o Unity será compatível com ele.

Apesar de o Unity não ser um motor usado em jogos AAA, a situação revela-se potencialmente preocupante. O jogo original foi desenvolvido em PC sendo posteriormente convertido para as consolas. Dado que o Hardware das consolas é basicamente o mesmo dos PCs e muito comum entre elas, os problemas de performance a este nível na Xbox One são deveras preocupantes.

O problema aqui está no uso do gerador processual de árvores Speedtree e que cria as árvores no momento. Este é um módulo usado por vários motores, incluindo o popular Unreal Engine 4, mas que, de acordo com a Midgar está muito mal optimizado para o Unity.

Jogos da actual geração que já o usaram, nas suas diversas variantes adaptáveis a diversos motores, foram (inclusive alguns filmes como Thor, Star Trek: Into the darkness, X-Men: Days of future Past, etc, usaram-no):

Speedtree


 

É certo que se percebe que há ali falta de optimizações no módulo das árvores, mas também é certo que esse problema deveria afectar igualmente a PS4. Mas no entanto… isso não acontece na mesma escala.

O que se poderá estar a passar?

Nota: O que se segue é mera teorização baseada na informação dada por programadores relativa às performances do Speedtree no motor Unity.

Naturalmente o que vamos dizer de seguida não é uma certeza. Não estamos por dentro do jogo para saber, mas fomos até aos fóruns do Unity ver o que outros programadores diziam sobre problemas de performance do SpeedTree neste motor, e encontramos algumas coisas interessantes:

Por exemplo, neste Thread discute-se a performance do SpeedTree no desenvolvimento de uma aplicação. O desenvolvimento está a decorrer num PC, com um processador fx6300, uma gráfica gtx660, e 16 GB de RAM, e a queixa é que a performance está terrível sendo que o uso do CPU está nos 22 ms, apesar de o rendering gráfico estar a ser feito em 2,7 ms. E na conversa algo é consensual: Tal como afirmado, o Speedtree tem problemas na sua versão para o Unity,

No entanto, mesmo não sendo possível superar esses problemas sem uma nova versão do plug-in, uma das respostas da discussão parece conter pistas para, dentro das más performances do Speedtree, justificar aquilo que poderá ser a razão da disparidade de performances da Xbox One face à PS4. E cito-a!

“I have a similar problem with speedtrees eating the drawcalls count”

Traduzindo: Tenho um problema similar com o Speedtree a comer a minha contagem de chamadas de desenho.

Naturalmente esta situação, a ser aceite como um problema no Unity, e associada ao que é dito na notícia de cima, faz ocorrer uma possível resposta para o problema. As chamadas de desenho são um problema muito grande nos APIs de alto nível, sendo que as mesmas exigem uma utilização enorme do CPU. E essa é a vantagem dos APIs de baixo nível, que reduzem o “overhead” ou sobrecarga no CPU, libertando-o para mais processamento.

O Speedtree é extremamente dependente do CPU, e com este limitado, o GPU não consegue debitar. Reduzir o “overhead” das chamadas de desenho no CPU, libertando-o, permite que este faça ainda mais chamadas de desenho, melhorando as performances do GPU.


Aqui no presente jogo o CPU não parece estar a ser problemático, uma vez que a equipa nem o refere, havendo assim CPU de sobra, mas o facto de este poder estar a ter sobrecargas com as chamadas de desenho poderá estar a limitar o desempenho do GPU.

E ao que é referido, a equipa não está a trabalhar com o DirectX 12, o que quererá dizer que, a equipa poderá estar a usar o Unity em DirectX 11 puro!

Isso explicaria as performances do PC. A sua maior potência bruta sobrepom-se a essas limitações! E explicaria igualmente as performances da PS4, uma vez que nessa plataforma o Unity trabalha no API da PS4 que é já de si baixo nível.

Mas a Xbox possui um problema, que é o suporte genérico ao DX 11. Não é dito se a equipa está a usar os módulos da Xbox One, mas com o Speedtree poderá estar a falhar aqui a optimização ao API de baixo nível da Xbox One.

E se esta possibilidade tiver alguma razão de ser, a passagem para o DirectX 12 deverá melhorar as performances da consola.

Mas claro, isto é tudo especulação! A questão é que, como se tem vindo a ver ao longo de dois anos, a diferença entre as consolas, não se metendo o GPGPU pelo meio, tem sido bem menor do que a referida aqui. A diferença entre 720p e 1080p são 125% de pixels adicionais, algo bem distante dos cerca de 40% de diferença reais entre os GPUs. E se isto aconteceu em jogos de lançamento como COD: Ghosts, haviam na altura situações de recursos reservados, má optimização da eSRAM, etc, que agora não existem. Por esse motivo, surgir agora um jogo que não só requer esses 125% de diferença como ainda poderá necessitar de cortes no detalhe, não é normal. E daí que, após esta pequena análise que fizemos nos fóruns, apontamos para a situação de cima como a causa de tal disparidade (o que não quer dizer que a Xbox consiga 1080p, mas pelo menos 900p)

Mas claro, não estamos ligados ao desenvolvimento do jogo, e aos seus problemas reais, pelo que o que referimos é apenas um palpite. A ver vamos se o tempo nos dará razão!

Publicidade

Posts Relacionados