Ex-programador da Naughty Dog explica porque o DX 12 e o Vulkan não trarão grandes ganhos às consolas.

APIs

Apesar de esta situação não ser novidade para os nossos leitores, um ex-programador da Naughty Dog explica por palavras suas um dos motivos pelos quais o DirectX 12/Vulkan não terão nas consolas o mesmo impacto que nos PCs.

APIs

Antes de citarmos as palavras de John Hable,, um ex-membro da Naughty Dog e que iniciou a sua própria empresa, a Filmic Works, vamos recordar os dois motivos que ao longo dos tempos sempre demos a conhecer para se perceber que o DirectX 12 nem de longe, nem de perto, terá nas consolas o mesmo impacto que terá nos PCs. E são eles:

Motivo 1:

- Muito do que irá ser implementado no DirectX 12 está já implementado desde sempre nas consolas. Algumas dessas situações vem mesmo de trás da anterior geração, mas certas situações novas foram introduzidas para suporte às novas consolas. Mas no entanto tal não acontece actualmente nos PCs onde presentemente não existe absolutamente nada de baixo nível aplicado aos mesmos.

Motivo 2:

- Apesar de estes poderem existir, o DirectX 12 deverá trazer ganhos pequenos na performance do GPU, sendo que os reais ganhos de performance serão na utilização do CPU. Dado que os jogos de consolas são concebidos para atingirem em simultâneo a utilização do GPU e do CPU, os ganhos para o GPU ficam dificultados de existir pois este já se encontra relativamente maximizado. Naturalmente existirão casos onde tal não acontece e onde haverá ganhos, e existirá sempre uma libertação de CPU que permitirá ser usada para melhoria das fisicas, das colisões, da IA, etc.

Mas vamos então ver as palavras de John Hable que aborda mais especificamente e profundamente o motivo 2 para explicar porque motivo as consolas beneficiarão menos que os PCs do novo API, bem como nos explica o funcionamento dos novos APIs e as formas como eles poderão permitir ganhos futuros.

A resposta mais curta é que os novos APIs irão tornar o CPU mais rápido, mas provavelmente tal não terá grande efeito no GPU. As melhorias no API são basicamente no tempo que demora ao CPU para dizer ao GPU o que quer fazer, mas tal não afectará o tempo que o GPU demora a executar essas instruções.

Se o jogo está limitado por um gargalo no CPU, mudar para o DirectX 12 ou Vulkan irá ajudar bastante o jogo. Mas se o limite for um gargalo do GPU, o API irá ajudar muito pouco ou mesmo nada. Dado que muitos jogos PC encontram os seus gargalos no CPU iremos ver ali ganhos enormes. No entanto os jogos de consolas estão normalmente igualmente limitados pelo GPU pelo que não esperaria grandes mudanças como os novos APIs. O GPU é o mesmo quer se use o OpenGL, DirectX 11/12 ou o Vulkan.

Digamos que estamos a desenhar uma engraçada família de coelhinhos. Esses coelhos são feitos de triangulos e cada um possui um mapeamento de cor, um “normal map“ (Nota do redactor: uma espécie de “bump mapping” que lhe dá relevo), etc. Com o OpenGL ou DirectX 11 teriamos de descrever cada um desses coelhos um de cada vez. O primeiro coelho tem um mapa de cor vermelho. O segundo coelho tem um mapa de cor azul. O terceiro coelho tem um mapa de cor verde. E a cada fotograma teríamos de repetir isto tudo para o GPU, vezes e vezes sem conta.


O DirectX 12 e o Vulkan são mais eficientes. No primeiro fotograma podemos descrever todos os coelhos ao GPU. E podemos dizer que há um vermelho, um azul e um verde. Mas depois eles podem ser desenhados todos juntos. E se no DirectX 11 e Open GL terias de re-descrever os coelhos em cada fotograma, com o DirectX 12 e o Vulkan basta dizer “desenhas os coelhos todos”. Estou a simplificar demais, mas é esta a ideia.

A ideia chave é que a comunicação entre a aplicação e o GPU é muito mais eficiente. Podemos passar a mesma informação com menos sobrecarga no CPU. Mas no entanto o tempo que demora a desenhar os coelhos é o mesmo. Ao GPU pouco lhe interessa se os comandos partem do DirectX 11/12, Open GL ou Vulkan. ele leva o mesmo tempo de sempre a desenhar aqueles triangulos. Apenas temos que a comunicação (que ocupa o tempo de uso do CPU) é muito mais rápida.

Daí que se temos um jogo com um gargalo causado no CPU por este estar ocupado a dizer ao GPU o que quer fazer, estes APIs são uma grande ajuda. Isto é algo que acontece imenso nos jogos PCs onde temos placas poderosas que não estão a render mais apesar de poderem desenhar mais do que aquilo que o CPU lhes consegue pedir para fazer. Mas já nos jogos de consola há a tendência de se usar muito mais o GPU daí que há muitos menos ganhos a obter.

Apesar de o GPU poder tambem obter ganhos pelo caminho!Idealmente renderias os objectos de frente para trás para minimizar a escrita de pixels desnecessários/não visíveis (Nota do redactor: basicamente desta forma os pixels que já contivessem conteúdo escusavam de ser processados novamente uma vez que o efeito não é visível ao estarem preenchidos pelo objecto da frente). Infelizmente isso iria implicar muitas mudanças de estado e demoraria muito ao DirectX 11 e ao Open GL para traduzir esses comandos ao GPU. Ou seja, muitos jogos estão de forma intencional a tomar más decisões para o GPU para ajudar a não sobrecarregar o CPU.

Por exemplo, vamos supor que os coelhos se multiplicaram e agora há 5 deles vermelhos, 5 azuis e 5 verdes. Para o GPU a forma ideal de render os coelhos seria da frente para traz de forma a poupar escritas no ecrã, mas o custo no CPU de dizer à driver como fazer isso seria demasiadamente lento no DirectX 11 e Open GL.


Dizer ao GPU para render o vermelho, o azul, o azul, o verde, o vermelho, o azul, etc, implicaria muitas mudanças de estado. Assim temos de render todos os coelhos vermelhos de uma vez, seguidos pelos azuis e depois pelos verdes. Mas com o DirectX 12 e o Vulkan, a sobrecarga no CPU é baixa o suficiente para que se possam render os coelhos de forma optimizada da frente para trás. Naturalmente estou mais uma vez numa simplificação exagerada, e há outras considerações, mas a ideia é a mesma.

Sinceramente, bem mais instrutivo e realista do que as declarações de Brad Wardell!

Publicidade

Readers Comments (15)

  1. As declarações do Brad Wardell devem ser levadas com muito cuidado, porem, ele esta próximo a equipe DirectX 12 e com algum contato com o Vulkan, diferente de alguns caras que expressam seu ponto de vista.
    Pelo lado do Wardell, eu acho que ele exagerou na forma como disse que a velocidade do Xbox One dobraria, e pelo lado do pessoal de fora que da pitaco, eles aparecem tratar essa nova API como sendo apenas versões aliviadas de sobrecarga do DirectX 11, opengl. Essa é uma mudança de API, provavelmente isso se trata de muito mais do que redução de sobrecargas e sim de uma mudança dan abordagem padrão.

    • Se te recordas, aqui na PCManias referi em tempos os motivos pelos quais as consolas actuais seriam bem mais potentes do que se pensa. Um desses motivos eram os APIs de baixo nível. Se bem programadas com eles, em média, seria necessário um PC com um hardware com o dobro da potência para fazer igual. Essa é uma ideia relativamente consensual que os programadores trouxeram do hardware da anterior geração e um valor referido em inúmeras entrevistas por inúmeras pessoas. Daí que os ganhos de um API de baixo nível sejam uma realidade conhecida.
      Brad Wardell, apesar da sua forma sensacionalista de falar, refere ganhos reais que experimenta. Ele não é mentiroso ou aldrabão. O que se passa é apenas que ele tem zero de experiencia com as consolas. Ele nunca mexeu nelas com os APIs actuais pelo que a sua comparação é face à realidade que conhece do DX11. E que não é a realidade das consolas.
      É certo que algumas situações adicionais de aproveitamento do CPU como o multithreding e a possibilidade de cada núcleo do CPU comunicar independentemente com o GPU serão novidade na ONE pelo que é inegável que vamos ter ganhos extra. Mas nada, mesmo nada comparável ao PC. Se a Microsoft usa baixo nível na sua consola desde a 360, os PCs não possuem absolutamente nada. E as combinações de gráficas potentes com CPUs fracos são aos milhares. Logo aí terás ganhos abismais. Já nas consolas os sistemas são mais equilibrados e foram pensados para se atingir os máximos do CPU e GPU em simultâneo. Daí que mesmo havendo ganhos extra, é questionável o quanto haverá pois esses ganhos desde sempre que tinham condições para serem implementados.
      Onde eu acredito em grandes ganhos é em rotinas novas optimizadas para explorar aquilo que um API de baixo nível permite. E havendo uma universalidade de baixo nível escusamos de andar com códigos remendados para compatibilidades.

      • Mario, da uma olhada nesse forum, mais especificamente no post #54.

        http://forum.projectcarsgame.com/showthread.php?27276-A-question-to-the-devs-about-the-frame-rate-issue&p=942715&viewfull=1

        Quando um dos usuários fazia questionamento sobre melhora de performance no PS4 o desenvolvedor de Project cars respondeu que o PS4 já é muito bom mas que gostaria que a Sony emulasse de alguma forma os benefícios do DirectX 12. Mais a frente ele diz que haverá um patch DX12 para Xbox One e quando questionado sobre o desempenho afirma que a melhora está entre 30 - 40%.
        Sera que há algo no DirectX 12 que é melhor que o GNM? Será que o programador que trabalhou na ND já conhece todos os recursos do DirectX 12?

        • Dei uma vista de olhos rápida, e eis o que concluo:

          1º O que ele fala é de uma emulação do DX 12, não do suporte das mesmas caracteristicas.
          Resumidamente o que entendo que ele quer é que o actual Wrapper que faz a conversão do DX 11 para a PS4 passe a incluir as novidades do DX 12.
          Ou seja, ele não fala do GNM, pelo que não concluiria mais do que isso!

          2º - Ele refere que o DX 12 trará ganhos entre 30 a 40%. Mas em lado nenhum refere que é para a Xbox One. Aliás nem sequer a pergunta sobre o ganho, ao contrário do que referes, refere a Xbox One, mas sim, e apenas, o DX 12.

          Aliás actualmente o fórum está todo à espera de uma resposta do Ian sobre quais os ganhos na Xbox One, pois a resposta não é clara e, sinceramente eu não apontaria para que a One estivesse incluida.
          O DX 12 não acrescenta capacidade de processamento, apenas melhora o rendimento do hardware. E a Xbox One já possui muitas das melhorias do DX 12 no seu actual API. Se os programadores as estão a usar ou não, isso é outra coisa. Porque se estão com código DX 11 puro, haverá ganhos grandes na consola, assim como os haveria se eles fossem ao GNM directamente.
          Se tal não for o caso, a Xbox One ganhará! Quem sabe esse foi o motivo pelo qual eles falaram da actualização do Wrapper?

          • Eu acho que é uma coisa meio óbvia, em toda a thread eles estão falando de Xbox One e PS4, ai ele diz que um patch DirectX 12 virá para o Xbox One, então alguém pergunta sobre os ganhos de desempenho e ele fala de 30 - 40%. Pelo histórico da conversa, entendesse que ele continua falando de consoles. Mais a frente quando começam a questionar sobre GNM, se utilizaram todos os núcleos do PS4 o que ele responde é que utilizaram todos os núcleos e que a questão já tinha sido respondida antes. Ele pareceu dizer sobre recursos do DirectX 12 no API do PS4 que não existem, senão ele não teria dito que o PS4 já é muito bom mas ainda pode vir mais.

        • A pergunta é clara. O DX 12 trará ganhos?
          É a esta pergunta apenas que há uma resposta. Nada mais!
          Daí que não concluiria muito mais!
          Mas é como te disse, se o código que está a correr na One for puro DX 11, os mesmos valores poderão ser aplicados à consola. No entanto, dada a comparação do que existe na consola e nos PCs, sinceramente duvido muito que não estejam já a haver grandes optimizações para as mesmas, pelo que os ganhos com o DX 12 na consola serão bem menores.
          Não vou no entanto descartar a hipotese de os 30 a 40% poderem aparecer na One, pois a resposta não é suficiente para concluir nem para um lado, nem para o outro, até porque a pergunta não sendo específica da One, o Thread é sobre as performances na Xbox One!

          • Temos visto algumas demos no PC com ganhos de, sei lá, 400%?
            Perto de números assim, 30% no Xbox One seria uma ganho pequeno como dizem.

          • Não existem ganhos de 400%. Isso só mesmo em demos criadas para demonstrar as virtudes de um API de baixo nível, ou em situações pontuais. Para algo assim teríamos de criar um jogo de raiz pensado em usar as características onde um API de baixo nível nos trazem ganhos (milhares de objectos controlados pelo CPU, ou partículas igualmente aos milhares). O Mantle nos jogos onde foi aplicado trouxe ganhos de 30 a 40%, mas em alguns locais os ganhos até foram menores. Num jogo genérico se um dia vir ganhos de 100% diria estarmos perante uma optimização ideal.
            O baixo nível não te traz mais performance, traz mais rendimento. Elimina gargalos de forma que ficas com mais CPU disponível. Isso pode permitir ter mais GPU mas os grandes ganhos são no CPU. Onde vais ver mais fotogramas será nos sítios onde o CPU estava limitado. Project Cars tem graves quedas de performance gráfica como aumento do numero de carros, logo está limitado pelo CPU e pode ganhar. Se calhar até pode ganhar os 30%. Não me admirava nada. Mas acima de tudo que fique claro que este ganho não será constante, mas apenas onde o CPU limitava o GPU.

            O que é muito, mas mesmo muito curioso é que o IAN não tenha respondido diretamente à questão que está agora pendente. ele falava da Xbox ou não?

          • Tem uma coisa que não parece claro pra mim. Nos documentos vazados do Xbox One ainda antes do lançamento, a Microsoft nomeia o API como DirectX 11.X, sendo esse X uma forma de especificar que é o API personalizado para o console e que é compatível com o DirectX 11.1, na época ainda não haviam os posteriores 11.2 e 11.3.
            Mais a frente ficou revelado que o DirectX 11.X, que em algum momento a Microsoft chamou de “mono driver” já continha funcionalidades do futuro DirectX 12 mas foi enfatizado que não eram todos os recursos e o suporte completo viria posteriormente.
            Sabemos que o DirectX 12 por mais baixo nivel que conseguiram, não é como console pois precisa funcionar em uma quantidade significativa de hardware. Ai está minha duvida, embora o Xbox One terá uma compatibilidade com o DX 12 assim como hoje tem com o DX 11 e derivados, sera possível que venha a existir um DirectX 12.X, completamente focado ao console com os recursos que eles disseram ainda não estar implementados?

          • Já te respondi a isso. O principal de um API de baixo nível é a redução da sobrecarga do CPU nas escritas gráficas. E como vês neste slide http://www.pcmanias.com/wp-content/uploads/2014/03/DirectX12.jpg o “overhead” no uso do direct3d estava já eliminado. Haverá ganhos na Xbox sim, mas não tão grandes como no PC a não ser que a equipa tenha programado em DX 11 puro.

          • Em uma Thread sobre Xbox One ele solta essa e as pessoas ficam pedindo para ele confirmar como se estivessem prontas para soltar a informação em algum site qualquer com um titulo do tipo “programador de Project Cars fala de 40% de melhora com DirectX 12 no Xbox One”. Talvez ele não queira se comprometer a falar mais sobre o assunto até por que há casos e casos. Talvez no caso dele ganha até 40% de desempenho, mas as pessoas vão bater nessa tecla da forma incorreta. Imagina o que o misterxmedia vai falar no circo dele se ele confirmar isso?
            Mas tudo leva a crer que ele falava do Xbox, primeiro por que era o assunto que ele mesmo começou, dizendo que o DX 12 no Xbox era uma grande melhora pra eles, e segundo por que é muito estranho alguem estar descutindo sobre algo e falar de outra coisa sem deixar claro que está trocando o assunto. Eu acho que nem precisavam cobrar dele uma resposta sobre isso. Esperem o patch para confirmar qualquer coisa, pois apenas um patch pode dizer qual a melhoria real na troca de API, já que a tendencia dos próximos jogos é já vir codificado para o DirectX 12.

          • Poderá ser… poderá não ser!

            40% acharia um ganho normal em um motor não concebido de raiz para um API de baixo nível. Mas só o considero normal se o motor actual não tirar partido de absolutamente nada de baixo nível.
            E dado que as consolas não são assim tão potentes, mas comparativamente aos PCs até nem se estão a safar nada mal, tenho alguma dificuldade em aceitar isso sem a confirmação.

            E tu sabes como eu sou! Sóu céptico em tudo até ser confirmado. Afinal tretas e promessas existem todos os dias e depois é o que é!
            Afinal o que está a ocupar a grande parte do CPU do jogo é a física, e isso o DX 12 não ajuda nada, apenas nas partes de gestão da escrita para o GPU.
            Daí que até haver uma confirmação vou apenas assumir que o DX 12 pode trazer ganhos de 30 a 40%. Em qual sistema? não sei! E pelo pior vou presumir que é no PC, afinal esses eram os ganhos que vimos em Thief e Battlefield 4 no Mantle e entre um API de alto nível e um de Baixo.

            Mas se isso se confirmar na Xbox One, certamente terá direito a notícia, por vários motivos, e um deles é a má optimização que as consolas estariam actualmente a ter, ao passo que no PC é apenas um ganho normal!

          • A propósito, o Ian já respondeu. E tal como sempre suspeitei (basta ter os pés assentes na terra), os 30 a 40% são no PC. A Xbox Onde irá ganhar entre 5 a 7%. Curiosamente um ganho que a equipa já afirmou que também irá dar em alguma percentagem, à versão PS4.

  2. Mal posso esperar para vermos como tudo irá ficar , apenas devo ressaltar que pelo menos no PC wardell não apenas falou mas mostrou grandes resultados enquanto que mesmo sendo mais tecnico hable apenas teorizou.

    Não acredito em o dobro de potencia vindo gratuitamente, mas acredito que novas API podem trazer novas tecnicas e um novo aprendizado.

    • Na realidade Hable tem um historial de programação em consolas infinitamente superior. O que aliás nem seria muito difícil dado que o de Wardell é Zero.
      De resto lê o meu comentário em resposta ao Fernando.

Os comentarios estao fechados.