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

Posts Relacionados