DirectX 12 poderá vir a ser um flop?

Quem viu 2016 pensou que o DirectX 12 iria arrancar. Mas em 2017 o que se viu foi um regresso em força dos jogos DirectX 11!

2016 viu o aparecimento de uma boa quantidade de jogos DirectX 12, mas curiosamente quase todos eles tinham algo em comum! Apesar de uma melhoria substancial no uso do CPU, estes jogos apresentavam todos eles ganhos irrisórios ou até perdas face às versões do DirectX 11, muito melhor conhecida e explorada pelos programadores.

Do que foi visto em 2016, Rise of the Tomb Raider corria melhor com o DX11, isto apesar de ser inegável que em algumas cenas o DX 12 se mostrava superior. HITMAN revelou a mesma tendência, com algumas cenas a serem superiores no DX 12, mas com performances globais superiores no DX 11. Já Deus Ex: Mankind Divided’s mostrou severos problemas de performance no DX12 que não possuia no DX 11. E mesmo exclusivos Microsoft que tiravam total partido do DX 12 como Quantum Break corriam no PC bem pior em DX 12 do que em DX 11.

Mesmo jogos criados por equipas experimentadas em APIs de baixo nível, como foi o caso da DICE que até criou o Mantle, decepcionaram. Battlefield 1 no seu modo DX 12 corria pior que a versão DX 11. Isto apesar de a versão Mantle estar muito bem conseguida!

Tivemos ainda outros jogos como Sid Meier’s Civilization VI e Total War: WARHAMMER que suportaram o DX 12, mas sem qualquer ganho que fosse uma vez que não usaram o mesmo para o multi-tasking (a distribuição de tarefas pelos CPUs).



Aliás, mesmo nos exclusivos Microsoft, criadora do API foi a mesma coisa! Forza Horizon 3 quando foi lançado apenas suportava um núcleo nos CPUs PC, apesar do seu suporte DX 12, requerendo uma série de patches para passar a distribuir melhor as tarefas e a suportar melhor os vários núcleos. Forza 7 voltou a repetir a situação, voltando a suportar apenas um núcleo no PC, e Gears of War: Ultimate Edition tambem não teve sequer uma performance dentro do esperado para um Remaster.

Mas então, o que se passa? Porque é que isto acontece? Bem, o DX 12 e o DX 11 não são, ao contrário do que o nome possa dar a entender, exactamente a mesma coisa. O funcionamento do DX 12 obriga a re-escrever muito do código dos motores para que este possa tirar partido do API. Basicamente o que aconteceu em 2016 foi que o suporte foi realmente acrescentado, mas apenas nas partes que são novidade, como a computação assincrona, porque no resto, ninguém se deu verdadeiramente ao trabalho de re-escrever os seus motores.

Nesse sentido o suporte multi-CPU com a distribuição correcta das tarefas pelos vários núcleos quando funciona, não funciona a 100%.

Grande parte da culpa da falta de uso do API prende-se tambem com as diferenças dos GPUs AMD e Nvidia. Os AMD’s beneficiam e muito da computação assincrona e do DX 12, mas a Nvidia não tira o mesmo partido deles. E nesse sentido a Nvidia optimizou as suas drivers DX 11 ao máximo, sendo que, na parte que toca ao CPU, os ganhos do DX12 nas placas Nvidia traduzem-se em ganhos nulos, ou até perdas.

E nesse sentido o DX 12 não se tornou um sucesso!

Mas 2017 não trouxe grandes novidades no uso de APIs de baixo nível. Apenas 6 jogos os suportaram: Forza Motorsport 7, Star Wars Battlefront 2, Sniper Elite 4, Halo Wars 2, Total War: WARHAMMER 2 e Wolfenstein 2: The New Colossus. Isto face a 2016 foi uma quebra, pois aí tínhamos tido exactamente o dobro dos jogos (12) a suportar APIs de baixo nível  (DX 12 e Vulkan). Foi uma quebra de 50%.



Curiosamente, apesar de muitos criadores terem experimentado o DX 12, ele foi em 2017 ignorado. A CodeMasters por exemplo, tinha anunciado em 2016 que o seu motor, o EGO engine tinha acrescentado suporte DX 12, mas quando F1 2017 saiu a usar esse motor… só suporta DirectX 11! E o mesmo se passou por exemplo com a Ubisoft que tem vindo a fazer experiências em vários jogos e até já usou a computação assincrona em AC 4: Black Flag na PS4, quando lançou Watch Dogs 2 e AC: Origins no PC, estes saíram em DX 11!

Note-se que esta situação em nada tem afectado a PS4 que continua a ter a sua programação distinta e optimizada. Já a Xbox, apesar de certamente estar a ter optimizações separadas, ao partilhar código com o PC poderá não estar a levar as optimizações ideais do DX 12.

Dos jogos lançados em 2017, Sniper Elite 4 foi o que mais vantagens mostrou com o DX 12, mas isso em hardware AMD. Halo Wars 2 e Forza 7 não puderam ser comparados com a versão DX 11 pois só suportam DX 12, mas Total War: WARHAMMER 2 e Battlefront 2 portaram-se melhor com o DX 11 do que com o DX 12. Basicamente o que se estava a ver já em 2016!

Agora convém é não esquecer o que já tínhamos dito antes! Que os jogos DX 12 PC não tiram vantagem adequada dos vários núcleos de CPU, e apesar de eles obterem em determinados sistemas mais de 100 fps, a realidade é que o CPU acaba por ser o gargalo devido a tal. Uma situação que não ocorre nas consolas, e que torna as comparações com estas uma ferramenta de Marketing de grande valor para promoção da consola, mais do que realmente uma comparação real.



O certo é que se há algo que promove o uso do DX 12 são as consolas Microsoft, e agora com a X cá fora, os incentivos serão ainda maiores. A questão é se os ganhos, face ao trabalho adicional do uso do DX 12, justificarão… e essa e a grande questão! Programadores mais experimentados não terão problema com ele, mas os outros, pela maior dificuldade, fugirão dele.

Numa declaração, Tiago Rodrigues, programador 3D na Ubisoft Montreal referiu que a maior parte dos programadores não se mostram muito entusiasmados com o DX 12 uma vez que a performance bruta é interessante e a experiência permite-lhes isso mais facilmente com  o DX 11, mesmo que o sistema fique subaproveitado. Rodrigues ainda acrescentou que um jogo DX 12 requer muito esforço para ser realizado no mesmo tempo de desenvolvimento que um jogo DX 11.

Daí que o DX 12, e os APIs de baixo nível em geral, podem vir a revelar-se um flop… pelo menos neste momento é para aí que caminha!

Fonte: DSOgaming