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



Posts Relacionados

Readers Comments (19)

  1. Não consigo entender esses programadores,pois se as consolas atuais estão com um formato quase idêntico aos PCs,por que não suplantar algo que seu uso em tese foi comprovado melhorias significativas de desempenhos das GPU(placas AMD).
    Bom,não sei se seria bom mesmo esta arquitetuta que éra única nas consolas que desse certo nos PCS.
    Gostaria de ver para breve o beneficio real do uso desta computação assíncrona,nas atuais e futuras plataformas,onde os ganhos seriam imensos com estas placas Ryzen da AMD.

    • O problema do API de baixo nível no PC é a diversidade do hardware. O DX 12 melhora muito o uso do CPU, mas por outro lado é muito mais dificil de se usar. Com CPUs super potentes como os i7 e os Ryzen, e os jogos sendo todos adaptados aos CPUs das consolas, o DX 12 torna-se pouco interessante.
      Por outro lado é mais dificil de programar e a performance do GPU sofre, mesmo ganhando no CPU!
      O GPGPU é o ponto mais interessante, mas a Nvidia não é boa nisso! E a Nvidia tem o grosso do mercado PC!
      Por outras palavras, um API bem optimizado no PC tem preponderância por ser mais fácil de ser usado e funcionar bem na mesma!
      Daí que o DX 12 possa vir a ser um um flop.
      Fica a compensação que nas consolas os API de baixo nível continuam a ser usados e bem usados!

  2. No início, na época da revelação, havia entre os dernsores da nova API, o receio de que demoraria muito para a adoção, e é exatamente o que tem ocorrido. Um game para tirar total proveito do DX12 ou do próprio Vulkan, precisa quebrar toda compatibilidade com as versões anteriores das APIs. Como diz o Sebbbi, um game que tem modo DX11 e DX12, é na verdade um game DX11 onde o modo DX12 apenas emula coisas.
    O Xbox One também parece que não ajuda o PC, recentemente o próprio Sebbbi, que agora deve estar livre de NDAs, escreveu em um post que na verdade não é o directx a API do console, e sim uma versão de nível muito mais baixo que expõe características do hardware AMD não disponiveis no PC.
    Presumo, e agora é uma suposição minha, que o Xbox One não auxilia jogos do PC com DirectX 12, e na verdade é o contrário. O que o Xbox One facilita é para o desenvolvedor que criou o game no Directx 12 porte o jogo de forma direta por compatibilidade do sistema operacional. Até hoje, o único game que tem performance excelente no Xbox One e no PC com directx 12, é o Gears of War 4. Então presumo que ou o jogo tinha duas equipes tirando proveito ao máximo de cada plataforma, ou o que é mais fácil de acreditar devido ao tempo reduzido de desenvolvimento desde o anúncio, este game foi feito no PC e portado para o Xbox.
    Levando em consideração que o motor de forza que sempre foi muito otimizado para o console, de forma inexplicável não escala corretamente para os nucleos da CPU no PC, mas o Gears of War 4 é um show de programação nas duas plataformas, faz sentido o que suponho.

    • Esta informação do Sebbi é de grande valia Fernando.
      Mas será que ele esta correto na afirmação do API,pois quando Mic apresentou o Xbox lembro de uma palheta em slide algo sobre o 12,penso eu que o direct x12 no Xbox vai mais ao metal do que no kit aplicado nos pcs.
      A Mic foi experta ao fazer esta jogada.

      • Há esqueci de dizer a ti Fernando algo fora do contexto,mas como sabemos a aproximação do PC com a Mic estava a falar com um amigo de trabalho que também tem um Xbox que seria muito legal a Mic trazer jogos como Spin Tires e o Euro Truck(2 jogaços imperdíveis no PC)ai seria excelente.Abraço.

      • Esperta? Em que sentido?
        Isso não foi uma opção… É uma realidade física!
        Em 2007 vi uma demo tecnológica daquelas de 64 KB. Era impressionante! Com apenas 64 KB a demonstrava processualmente um jogo ao estilo do Doom. Tudo era criado em tempo real, texturas, luz, cenários, etc!
        O resultado era fraco, mas a ideia não era ser forte, era apenas mostrar que usando o GPU e CPU ao máximo de processamento, podias gerar um mundo inteiro sem o teres previamente definido.
        Mas o interessante de se ver, mais do que a demo, eram as notas do autor nos txt que a acompanhavam.
        Nelas ele explicava que gostava de ter feito a coisa de uma forma, mas que, devido ao modelo X ou Y da Marca A, não o pode fazer. Esse GPU tem problemas e suportar isso iria quebrar a compatibilidade. Outro caso separava as AMD das NVIDIA e referia que uma das marcas era muito boa a fazer um determinado tipo de processamento onde a outra era muito má (num exemplo mais recente tens o GPGPU), o que obrigava a ir por um caminho intermédio. Era muito interessante ler-se aquilo para se perceber como hardware variado limita muito a forma como se pode explorar o mesmo.
        A Microsoft fazer isso foi apenas adaptar-se à realidade. Não teve esperteza nenhuma. Não é que não possas ir igualmente fundo no PC, mas quanto mais fundo fores mais limitas o mercado, sendo que no limite ficar-te por uma único hardware se quiseres explorar alguma potencialidade do mesmo ao máximo. E no PC isso não pode existir.

        • Quando me referi esperta,quis dizer que se o PC tivesse um API a grosso modo igual aos consoles o fosso em qualidade seria maior em um curto prazo de tempo referente aos consoles,pois um API neste caso só teria ganhos o PC,pois os consoles já trabalham com esta tecnologia e que era único da plataforma,pois o PC somente trabalhava com API de alto nível.
          É difícil entender este mercado,pois acho que a AMD que criou o Mantle juntamente com a Dice e relatou que suas placas não eram maximizadas pelo uso do Direct 11.
          Culpa não do Direct 11 e sim da Nvidia,que como relatou tem o grosso do mercado e suas placas correm bem em API de alto nível sem uso do GPGPU.

          • Exacto!
            O Vulkan e o Mantle são bons em placas AMD, mas a Nvidia dispensa-os!
            One estes APIs são relevantes é na poupança de CPU. Mas com os CPUs potentes do PC e com os jogos a terem as consolas como plataforma base, eles estão pouco preocupados.
            O Forza que usa os nucleos todos da conso,a no PC só usava um… e mesmo assim corria a 4K 60 fps! Só para se ter uma ideia do fosso de CPU!

          • O problema, Ewertom, é que é completamente impossível ao PC ter aquilo que a consola tem. Impossível, quer devido ao sistema operativo que corre no fundo, quer devido à variedade do hardware das configurações PC.

            Quando estas APIs, sobretudo o DX12 foi anunciado, houve muita gente a questionar-se qual o futuro das consolas, agora que o PC tem todas as suas vantagens?

            Mas não tem, e agora confirma-se que nunca teve.

            E era lógico, mas o marketing em torno da coisa, e a excitação dos fóruns em torno deste assunto criaram uma imagem de que seria possível.

            Quando vem o Mark Cerny a preocupar-se com os ciclos de relógio quando o assunto era o portar dos jogos da PS4 para a Pro, torna-se bastante óbvio que, nas consolas, o processamento e agendamento de instruções é planeado não só tendo em conta o hardware disponível, mas também o agendamento das instruções pelas diferentes partes do hardware (núcleos de CPU e GPU, acesso à memória, etc…)

            No PC, onde os núcleos do CPU, os GPUs e as memórias (sem falar das velocidades de relógio) são distintos é impossível fazer isto. Divide somente se tiveres garantias que o sistema é capaz de processar indepentemente da tarefa que está em cada núcleo.

          • Sabes que quando o DX 12 foi anunciado eu questionei-me como é que ele seria possível. O nível alcançado só poderia ser o obtido na proporção da compatibilidade de hardware entre AMD e Nvidia. E nesse aspecto pensei: Esquece. É impossível!
            O que o DX 12 fez no fundo foi um pouco isso, sendo que combateu a situação com aquilo a que a Microsoft chama de feature levels, ou seja, caracteristicas que as placas necessitam de ter para suportar os diversos níveis do API.
            Basicamente ao suportarem estas caracteristicas as placas possuem algo que as unifica. A diferença está depois na forma como implementam a coisa que é diferente. Aqui o que acontece é a criação de um código genérico que se aplica a ambas as placas e funciona em ambas, mas que não está optimizado para obter as performances máximas de nenhuma. É no entanto melhor que nada!
            Mas face a uma consola isso é pouco. Na consola o API puxa pela caracteristica usando código não genérico mas sim adaptado à forma como o hardware da consola, uníco e igual em todas, processa. Faz toda a diferença!
            Mas a grande diferença nem é essa. É que os feature levels não foram criados para que o hardware os suporte. Nesta fase inicial, os features levels foram criados baseados maioritáriamente no que o hardware já possuia. Ora no Pc o suporte do DX 12 só vai até aí. No uso das caracteristicas comuns das placas que ele pode suportar! Já nas consolas tudo o que está no hardware é suportado. Muitas coisas que o DX 12 PC nem sonha por não serem standard em todas as placas são suportadas e trazem ganhos enormes.
            Um dia, o PC pode vir a ter isto. Se a Microsoft definir um standard e os fabricantes criarem o hardware em torno dele. Atualmente isso não é assim, e o que existe é um software criado para optimizar o hardware existente. Foi isso que permitiu o DX 12 suportar as placas existentes. E porque? Porque ele se baseou no API da One criado para o seu GPU que possuia similaritudes com o restante hardware AMD e em alguma medida com as capacidades do Nvidia.
            Talvez no DX 13, mas aí teriamos de quebrar com a compatibilidade com o hardware antigo.
            O Vulkan vai mais fundo que o DX 12… e porque? Porque foi pensado apenas para o hardware AMD. A consequência é que vai mais fundo… mas só nesse hardware!

    • A diferença entre o Gears of War e o Forza é o motor. Gears usa o Unreal Engine 4, um motor criado com a intenção de ser ultra optimizado em várias plataformas. Já Forza não! Usa um motor criado para a Xbox One e adaptado ao PC.
      Quanto ao que o Sebbbi diz, é coerente. Um único hardware pode ser explorado de uma forma superior. Isso está em artigos diversos da PCManias. Acrescentas hardware com características diferentes e tens de programar mais genérico.
      Esse é o mal do PC, onde a diversidade de hardware, inclusive de fabricantes diferentes impede que o DX 12 atinja o nível das consolas. Mas mesmo assim, funciona…
      A X e a One, apesar de numa escala bem menor, também criam problemas uma à outra. A arquitectura e capacidades são diferentes. Logo explorar uma, mata a outra. A Microsoft até pode ter o cuidado de ir optimizado as duas, mas as thirds não o fazem tão facilmente. E tal como já disse, tendo a X a arquitetura da PS4 e Pro, se tiver de existir uma consola mais negligenciada, imagina qual é…

    • O que dizes do Sebbi confirma aquilo que aqui já se suspeitava quando esta história da partilha do API rebentou e quando toda a gente se questionou sobre o futuro das consolas agora que elas perderam a sua vantagem que lhes garantia performance face ao PC.

      Basicamente, o PC nunca teve o API baixo nível das consolas, nunca. Nem nunca vai ter. O que provavelmente a MS aplicou, quando falou no all-in-one e na WUP, foi um conjunto de ferramentas que permitia abstrair o software da MS de modo a correr no hardware PC de raíz, com algumas melhorias. E talvez seja essa ligação entre o API do PC e da consola.

      Sobre o auxílio da Xbox ao PC, estás a esquecer-te que há tempos falaste do processador de comandos e de como graças ao DX12 isso foi aplicado ao PC. É uma estrada de dois sentidos, mas não pode ser da forma como dizes porque se o porte ocorresse como o pintas, a versão Xbox estaria ao nível do PUBG. Logo, não é um simples porte e nem é nesse sentido. Se assim fosse os jogos estariam com gráficos mais puxados. Tu tens as bases criadas no PC, mas o grosso do trabalho – modelos, efeitos, mundo, é tudo criado e dimensionado na consola e no que esse hardware consegue fazer.

      Depois é que tens o porte da versão PC, com algum trabalho adicional onde possível.

      • Esta é da PCManias…Julho 2016

        http://www.pcmanias.com/programador-da-id-da-a-conhecer-que-directx-12-da-one-e-mais-profundo-que-o-do-pc/
        Não há novidade nenhuma. Aliás sem artigo específico já ando a dizer isso desde que o DX 12 foi anunciado.

      • Mas será que os Pcs nunca terá um API igual a dos consoles Bruno.
        Pois como nós sabemos que quem reclamou de API foi a AMD ao qual suas placas gráficas a muito tempo suporta API de baixo nível,por este motivo foi criado o Mantle,pois sabendo da diferença com placas Nvidia a AMD tinha que se mexer com um software que acompanhasse suas placas sem sofrer com aplicações da Nvidia onde em testes com DX11 o resultado era sempre para baixo.

        • Com as totais capacidades não… Queres um exemplo que percebes porque?
          Imagina um comando de TV. Eles tem botões e mais botões. Alguns são comuns a todas as TVs possuindo as teclas de ligar, de volume e os canais de TV. Um comando genérico tem estas teclas, e entende-o como o DX 11.
          Mas face ao comando da marca, ele está com muito poucas funções. O comando da marca tem teclas de teletexfo, teclas de navegação (cima, baixo, esqueda, direita), teclas para chamar directamente os hdmi, teclas para subir e descer niveis nos menus (ok, back, exit), enfim, uma panóplia de funções, muitas especificas da marca, outra do modelo como sensores de movimento, receptores de infravermelhos para saberes para que zona do ecrã apontas, comandos de voz, etc
          Se às teclas que já tens conseguires acrescentar algumas outras funções que quase todas as tvs suportam, como por exemplo as teclas de menu, as teclas de navegação, as teclas de teletexto, de retrocesso e avanço nos menus, estás a entrar em optimizações maiores. É o DX 12. Acresecenta e optimiza o que tinhas antes.
          Mas isto nunca pode ir ao nível de um comando criado a pensar na marca e muito menos no de um pensado para o modelo. O vulkan é o único que fez isso, colocou lá botões que a maior parte das pessoas não usam, mas quem as tem pode usar. Foi criado com base no mantle da AMD e tem o suporte para quem tem e para quem quiser acrescentar. Mas mesmo ele não suporta tudo, e isso só tendo um API criado para um hardware específico.
          O DX 12 já é muito bom existir no PC. Infelizmente para funcionar o mesmo requer alterações radicais nos motores de jogo, e por isso está sub aproveitado. É complexo de ser usado, e como a Nvidia domina o mercado PC e está super optimizada DX 11…

          • Eu entendo os dois comentários em resposta,mas o quero dizer é que se o mercado fosse dominado pela AMD,qual poderia ser os resultados com API de baixo nível nos pcs,sendo que a maioria dos programadores já estavam mais acostumados com a aplicação.
            Abraços.

          • Terás sempre um ganho em performance… o objetivo de um API de baixo nível é oferecer mais capacidade por menos. Por isso, se a AMD dominasse o PC terias melhor aproveitamento do GPGPU e possivelmente, no hardware AMD, melhor desempenho com hardware menos exigente. basicamente seria muito mais barato jogar em modo ultra e conseguir 60 ou 120 fps de forma estável.

            Basta ver o que a PS4 consegue oferecer a 1080p 30 fps numa placa que equivale à velhinha r9 270 com alguns CUs desactivados. Essa placa aguentava-se a 1080p e 40/50 fps em títulos como Crysis 3, Bioshock Infinite, etc, com tudo no máximo.

            Tu agora tens um grafismo que evoluiu sobre esses títulos e de forma clara (a única excepção talvez seja Crysis 3 no PC, mas comparando esse com Ryse Son of Rome, acho que também houve evolução).

            Compara Crysis 3 com Horizon Zero Dawn, Uncharted TLL e vê de que tipo de evolução falo.

            Por isso, e considerando a R9 270 um rebranding da 7870, tens basicamente hardware de 2011/2012 e que durante um ano mostrou jogos que eram versões PS3 com melhor resolução e fps (quase o que X faz pela ONE) agora a apresentar, mantendo os 1080p e 30 fps, melhor grafismo e efeitos inovadores (compara o Hitman mais recente com o Hitman Absolution, por exemplo).

            É este o tipo de milagres que tens no hardware das consolas – uma capacidade para conseguir melhorar e incorporar cada vez mais efeitos.

            NO PC o que uma API com baixo nível permitiria era conseguir mais performance em menos hardware.

          • A nível de especificações e especialmente velocidade de relógio é a R9 270. Mas devido aos 8 ACE, que só apareceram na 290, sempre referi como algo entre a R9 270 e a R9 270X.

Deixe um comentario

O seu e-mail nao sera publicado.


*