DirectX 12: Em que medida afecta o PC, a Xbox One e a PS4?

O DirectX 12 está à porta. E com ele uma nova geração de programação avizinha-se. Neste artigo vamos abordar em que é que o DirectX 12 irá afetar os três principais sistemas do mercado, o PC, a XBox One e a PS4.

directx-logo-2012-download-games-free

O DirectX 12 é o novo API da Microsoft. Trata-se de um API de nova geração e que será o primeiro API 100% de baixo nível que a empresa lança no mercado. Será igualmente o primeiro API de baixo nível para a plataforma PC.

Apesar de estes APIs serem uma realidade nas consolas à vários anos, especialmente nas consolas da Sony, a Microsoft estreou-se com os mesmos na Xbox 360. E mesmo nessa consola tal não foi adoptado de início.

A Xbox One curiosamente iniciou-se sem um API de baixo nível, sendo que a primeira geração de jogos usavam um DirectX 11 puro. Apenas com a Mono Driver lançada em meados de 2014 a consola permitiu aos programadores acessos de baixo nível no seu API que implementa já as componentes principais do DirectX 12. Diga-se aliás, que conforme a própria Microsoft referiu, foi graças ao trabalho efetuado no API da Xbox One que o DirectX 12 nasceu.



O DirectX 12 como API de baixo nível

Mas o que é um API de baixo nível? Bem, de forma muito resumida é uma linguagem de programação que permite aos programadores interagirem diretamente com o processamento do hardware, obtendo assim mais performance dos mesmos. Se até agora os programadores limitavam-se a dar os comandos e a coisa funcionava pela implementação existente na driver, agora é possível aceder-se diretamente ao hardware criando assim acessos mais rápidos, e acima de tudo, libertando o CPU do trabalho de de interpretação e execução do comando. E é exatamente na percentagem de CPU libertado que se dá os grandes ganhos de um API de baixo nível, sendo que estes ganhos podem ser usados para outro processamento, ou mesmo para solicitar mais trabalho gráfico.

Em algumas demonstrações PC criadas para incidir sobre pontos normalmente limitados pelos APIs normais chegamos a ver ganhos de gigantescos na ordem das largas centenas percentuais, apesar de em situações do mundo real os ganhos serem mais na ordem dos 20 a 30%.

Resumidamente, os APIs de baixo nível são extremamente virtuosos no que toca ao ganho de performances. São no entanto muito mais complexos a nível de programação exigindo conhecimentos mais profundos. É por esse motivo que o DirectX 12 mantêm uma compatibilidade com o DirectX 11 de forma a permitir a fuga para território mais seguro, ou a implementação mista dos dois APIs. Note-se porém que tudo o que for programado usando a compatibilidade com o DirectX 11 não terá qualquer ganho de performance pelo facto de ser feito no DirectX 12.

Mas o DirectX 12 não é só um API de baixo nível, é igualmente um API de nova geração. E nesse sentido implementa uma série de melhorias face ao DirectX 11, como é o caso da paralelização dos diversos CPUs de um sistema multi-núcleo que podem agora atingir todos eles a sua performance máxima, e a computação assíncrona do GPGPU que o DirectX 11 tão mal implementava.

 O PC

pc

É no PC que os ganhos serão maiores. Afinal este é um sistema que nunca contou com qualquer optimização deste tipo. O DirectX 12 é neste sistema uma revolução mas, naturalmente, não trará qualquer ganho aos jogos já existentes (a não ser que os mesmos sofram alguma alteração via um patch). Como já referido, o DirectX 12 requer programação específica para obter as performances extras, e pura e simplesmente os jogos actuais, ao serem DirectX 11, não podem beneficiar de tal.



Qualquer ganho que seja registado nas performances de um jogo DirectX 11 não atualizado para o novo API, com o Windows 10 não se devem ao DirectX 12, mas sim às alterações do próprio Windows 10 e o facto de este ser mais leve.

Já com os acessos de baixo nível de um API como o DirectX 12, os ganhos poderão ser variáveis. No entanto, em situações de mundo real de jogos AAA, o simples facto de um jogo suportar acessos de baixo nível deverão, como já vimos em Benchmarks do Mantle nos jogos que o suportaram (Battlefield 4, Thief, Need for Speed Rivals, Dragon Age: Inquisition, Sniper Elite III, etc), rondar em média algo entre os 20 e os 30% (o que não quer dizer que não possa ser menos ou mais). Não queremos afirmar que pontualmente os ganhos não sejam maiores, podendo ser centenas de vezes superiores, mas isso não será uma realidade constante a não ser que o jogo incida especificamente sobre situações anteriormente limitadas pelo DirectX 11 e se baseie essencialmente nisso (como a presença de milhares de objectos no ecrã – Star Swarm, Ashes of Singularity, etc).

Mas onde poderão surgir ganhos extraordinários é no uso de novas tecnologias como o Multi-Threading que permite agora explorar os núcleos todos de um CPU ao máximo (e que os CPUs e GPUs AMD bem agradecem a nível de performances), bem como na computação assincrona que era tão mal implementada no DirectX 11 . Estas duas situações, associadas aos ganhos normais de um API de baixo nível, deverão ver renascer o PC que poderá agora, e pela primeira vez, utilizar a performance total das poderosas placas gráficas do mercado.

E o suporte a estas tecnologias é uma situação que as consolas bem agradecem pois dependem do GPGPU para as suas performances máximas, e graças a este suporte o uso do mesmo deverá agora entrar em força no mercado.

A XBox One

xboxone-kinectic



No caso das consolas, e neste caso da Xbox One, face a jogos que já se encontrem optimizados para o atual API da consola, os ganhos serão relativamente reduzidos. Já face aos jogos que apenas foram convertidos para a consola, sem serem optimizados, os ganhos deverão ser semelhantes aos do PC.

No entanto, da mesma forma que no PC, surgem as novidades do Multi-Threading e do uso em pleno da computação assincrona no GPGPU. E será por aqui que o DirectX 12 trará novidades a nível de performances na consola, e que poderão ser consideráveis face ao actualmente existente.

No geral a consola manterá as diferenças face ao PC, mas melhorará face ao actualmente visualizado, pois como sempre referimos, o futuro das novas consolas passa pelo uso pleno do GPGPU.

Naturalmente surge a questão que todos esperam:

Mas e o DirectX 12 pode ajudar com os problemas da Xbox One em atingir os 1080p?

A resposta é simultaneamente um sim e um não! E isto porque?



Na realidade o problema da Xbox One para atingir resoluções mais altas prende-se com a pouca memória rápida que dispõem. A sua eSRAM ao ser de apenas 32 MB cria problemas para o frame-buffer, impossibilitando muitas vezes que se atinja os 1080p.

Ora o DirectX 12 nao vai colocar mais memória na Xbox One, e como tal não lhe vai resolver esse problema. E isso quer dizer que os jogos que gerem o Frame-Buffer pela metodologia tradicional terão sempre problemas com a limitação da memória, independentemente do uso do DirectX 12 ou não.

A questão é que as técnicas de programação estão em constante evolução, e como sabemos as consolas são as grandes responsáveis pelas optimizações ao código que vão aparecendo, exactamente porque colocam limites à performance disponível, forçando a fazer mais, com menos.

Nesse sentido, alguns jogos já deram a volta ao limite da Xbox. Alguns fizeram-nos porque a largura de banda necessária para o jogo e a fornecida pela DDR3 da consola não colocava entraves a partilhar parte do frame-buffer com a eSRAM (basicamente mediante sacrifícios gráficos), mas essa não é uma solução definitiva e garantida. E a solução para o problema apareceu com Forza Horizon 2 que pela primeira vez utilizou uma metodologia de rendering criada pela AMD, o forward+.

A diferença entre o forward rendering, a metodologia tradicional, e o forward plus prende-se que neste último caso parte do processamento gráfico é retirado ao pipeline gráfico e passado para a componente de computação genérica do GPU, o GPGPU.



A vantagem é não só um aumento de performance, mas igualmente menores requisitos de memória, permitindo assim reduzir a pegada do frame-buffer, e colocar 1080p a 60 fps no ecrã. Forza Horizon não corria a 60 fps, mas a técnica usada permitia tal, e esta está agora implementada em Forza 6.

Esta técnica está agora a ser analisada e alternativas estão a ser propostas por alguns programadores. Um desses é o nosso conhecido Sebastian Aaltonen, mais conhecido como Sebbbi e com quem costumamos trocar mensagens nos fóruns da Beyond 3D. Ele é o programador principal da Redlinx, e teve recentemente a oportunidade de explicar os seus avanços e métodos no SIGGRAPH 2015. Podem consultar a sua apresentação aqui.

Sebbbi usa uma tecnologia baseada no Deferred Rendering, e que tem vantagens a nível de performances com luzes face aos Forward Renderings. Infelizmente O Deferred Rendering é uma técnica muito exigente a nível de memória, sendo que TitanFall e Watch Dogs 4 se viram forçados a se ficarem pelos 792p devido ao limite de memória rápida da Xbox.

Recomendamos a consulta deste artigo para verificarem os limites de resolução da consola na metodologia tradicional de Forward Rendering e no Deferred Rendering.

Ora a metodologia de sebbbi junta as ideologias do Forward+, mas aplica-as ao deferred rendering onde a nossa preocupação não é com o frame-buffer, mas sim com o G-buffer, normalmente muito mais complexo e maior, ao possuir muito mais informação.



Sebbbi usa ainda aquilo a que chama de um truque no calculo do Multi Sampling Anti Aliasing, e que basicamente permite calcular um MSAA 8x com muito menos necessidade de memória rápida. E curiosamente, usando a eSRAM, consegue juntar o G-Buffer ao 8xMSAA alterado, em 1080p, a 60 fps, na Xbox One, com menos requisitos do que seria necessário para um mero MSAA 2x tradicional calculado com a sua nova técnica de rendering. Basicamente Sebbbi inova em dois campos em simultâneo.

sebbbi

Naturalmente estamos perante uma situação de demonstração e não um caso concreto, mas é um conceito que mostra que com este método os limites da eSRAM ficam completamente superados.

Relativamente ao truque do MSAA basicamente Sebbbi faz alguns cálculos com apenas 1/4 da resolução usando aproximações, mas com um resultado final em tudo semelhante ao método normal. Mas isso é algo pouco relevante para este artigo. Interessa-nos mais saber como sebbbi consegue criar um Gbuffer de 128 bits por pixel a 1080p 60 fps e coloca-lo nos 32 MB da consola (na realidade, se não contarmos o 8xMSAA obtido com o seu “truque”, ele só precisa de 18 MB)

E como já tínhamos referido, o segredo está em passar parte do processamento gráfico para o GPGPU. Neste caso a luz, o pós processamento, o “VT page generation” e o rendering de particulas são feitos pelo GPGPU, ficando no pipeline apenas o “culling + g-buffer draws + shadow draws”.



Resumidamente esta é uma metodologia que poderia ser aplicado já no DirectX 11, mas que com o DirectX 12 será elevada ao máximo graças às grandes melhorias na computação assincrona que este trará face ao DirectX 11. Diga-se aliás que nesse aspecto a Xbox One bem agradece o DirectX 12 pois a computação assíncrona era um dos capítulos onde o seu API perdia tremendamente para o da PS4.

A PS4

PS4-1-m

Falar da PS4 aqui pode parecer um pouco estranho para alguns. Afinal a consola não usa o API da Microsoft!

Não se julgue porém que tal situação a exclui das vantagens aportadas pelo novo API, pois isso não seria verdade.

Actualmente a PS4 também não usa o DirectX 11, mas isso não impede que os jogos sejam programados no mesmo, e adaptados posteriormente ao API da consola por conversão de comandos.



Aceitando-se que o API da PS4 suportará todas as características do DirectX 12, nesse aspecto nada se alterará face ao que ocorre agora, exceptuando o facto de os jogos passarem a implementar novas técnicas de programação e novas tecnologias que anteriormente não estavam disponíveis. Mas sendo a placa gráfica da PS4 da mesma família e arquitetura das placas GCN PC, nada a impede de usufruir da estrutura base da programação do DX 12, tal como agora o faz com o DX 11.

Basicamente é no novo tipo de acessos ao hardware e programação que o DirectX 12 trará que estarão os ganhos de performance. E é nesse campo que mesmo sistemas que não usam o DirectX 12, ao se pensar numa programação de baixo nível de raiz, irão ganhar, desde que equipados com um API que faça o mesmo, como se acredita ser o caso do API da PS4.

Mas porque a falta de palavras mais convictas?

O motivo é que sabemos que o API da PS4, o GNM é extremamente avançado e competente. No entanto muito pouco é conhecido sobre ele pois ao contrário da Microsoft a Sony mantêm sobre ele um elevado secretismo que leva a que se fale muito pouco do mesmo. Sabe-se no entanto que o mesmo é extremamente avançado e em constante evolução, tendo já sido elogiado por muitos como um excelente API. Aliás, o Mantle, o primeiro API a implementar todas as novidades e características que serão agora trazidas pelo DirectX 12, e que até o passava em especificações, mas que estava limitado a ser usado nas placas gráficas da AMD, foi mesmo dispensado pela Sony uma vez que o seu API já possuía idênticas implementações. E mesmo o Vulkan é duvidoso que venha a substituir o GNM, apesar de tal não invalidar que a Sony o possa vir a suportar como API secundário.

Ora como sabemos e vimos, caso o Mantle não tivesse sido abandonado pela AMD, nada o impedia de estar lado a lado com o DirectX como já vimos implementado em alguns benchmarks que comparavam os dois APIs. E esses dois APIs não eram sequer compatíveis, apesar de ambos correrem no Windows e suportarem o mesmo hardware. Nesse aspecto o API da PS4 não é verdadeiramente diferente. É apenas um outro API mas que, suportando o mesmo, poderá usar a estrutura de programação introduzida com o DirectX 12.



Quer isso dizer que se atualmente os jogos são programados em DirectX 11, sendo depois optimizados para as consolas usando as optimizações próprias dos seus APIs, com o DirectX 12 os jogos serão já pensados de raiz em explorar os acessos de baixo nível. E esta conversão pode ocorrer agora para a PS4 usando os equivalentes comandos do seu API.

De uma forma simplista, ter um API diferente nada invalida a consola de beneficiar do que o outro API traga, desde que suportando as mesmas características. É basicamente o mesmo que a Xbox One falar Inglês e a PS4 falar Francês. Basicamente duas linguagens completamente diferentes, mas que, desde que possuam palavras equivalentes para a passagem do conteúdo de um texto, poderá ser convertido mantendo o originalmente criado.

Resumidamente esta consola não beneficiará, como nunca beneficiou, diretamente do API, mas sim das metodologias e optimizações que poderão agora ser implementados com o mesmo, e que com o DirectX 11, a linguagem base de programação atual, e onde normalmente se desenvolvem os jogos multi-plataforma, nem sequer eram usadas.

E desta forma, dado que o DirectX é a plataforma preferencial de desenvolvimento dos jogos Multi-Plataforma, esperam-se igualmente grandes ganhos na PS4, especialmente com o uso do GPGPU. No global não vemos nenhum motivo pelo qual a PS4 não venha a ter uma capacidade de conversão idêntica à atualmente registada com o DX 11.

Face a jogos programados já de raiz para o o GNM, acredita-se que os ganhos deverão ser nulos, podendo até nem ser verdadeiramente compensador a conversão do DirectX 12.



Que surpresas nos reservam as consolas ainda face ao DirectX 12 e PC?

 O DirectX 12 vem complementar algumas lacunas do actual API da Xbox One. Mas isso não quer dizer que ele seja inferior ao DirectX 12.

Na realidade os APIs das consolas para além das características do DX 12 suportam características adicionais. Tal situação não será novidade para quem nos acompanha e leu em tempos este artigo.

Sebbbi tinha-nos já revelado que as placas da AMD possuem capacidades únicas e que como tal não foram suportadas pelo DirectX 12 (um API genérico), mas que as consolas aproveitam nos seus APIs dedicados.

Na altura foi falado das operações Cross Lane (na tabela de baixo as SIMD lane Swizzles), mas na sua apresentação Sebbbi revela muito mais características usadas por outros APIs como o Nvidia Cuda, o Open Cl 2.0, o GNM e o API da Xbox One. Apesar de não ser indicado que características são únicas de que API , refere-se a seguinte lista:

GPU_DX12_features



Não se admirem por isso se as consolas ainda tiverem uma ou duas cartas na manga. E certamente as suas performances vão subir face ao que já conhecemos.

The Order 1886 por exemplo, um exclusivo e dos maiores colossos gráficos da actual geração, sabe-se agora que foi concebido em DirectX 11 num motor multi-plataforma PS4 e PC. E isso prova que há ainda muito por onde optimizar nas consolas!



error: Conteúdo protegido