DirectX 12 – Explicado e… corrigido!

Brad Wardell é CEO da Stardock, e um defensor dos APIs de baixo nível. Num artigo recente ele explica de forma simplificada como ele funciona.

Brad Wardell escreveu um artigo no blog Littletinyfrogs denominado de “DirectX 11 vs DirectX 12 super simplificado” e é um artigo cuja leitura recomenda-mos.

No entanto, não o podemos fazer sem acrescentar algo mais, e isto porque na tentativa de simplificar a coisa, as frases de Wardell podem ser mal interpretadas uma vez que não relatam a realidade toda.

O artigo é efectivamente interessante no aspecto que explica muitas das dúvidas que muitos podem ter em relação ao DirectX 12. Mas infelizmente as simplificações criam algumas frases que não são verdade e que fora do contexto da simplificação desejada criam algumas inverdades que podem ser mal interpretadas. Recomenda-mos que os interessados em perceber o que será o DirectX 12 (ou basicamente o que um API de baixo nível pode fazer) sigam o link em causaem causa, seguindo este link, mas que continuem depois a ler este artigo.

Brad Wardell avisa logo no início: “This article is an extreme oversimplification”, ou seja, que o artigo é uma sobre simplificação extrema. E apesar de acharmos que ele está muito bom no que toca à explicação, essas simplificações criam ali afirmações que mesmo sem intenção, não são totalmente correctas.



De relevante do artigo interessa perceber a explicação de Wardell sobre o facto de o DirectX 12 não ser verdadeiramente um API e baixo nível no sentido que permita o acesso directo ao Hardware e à forma como este processa (100% directo ao metal). Isso é uma realidade que deverá manter-se exclusivo das consolas e que se torna quase impossível de implementar de forma genérica. É por esse motivo, por ser limitado à arquitectura GCN, que se refere que o Mantle expõem mais situações de baixo nível do que o DirectX 12, tendo mais em comum com os APIs das consolas do que o próprio DirectX 12 (nos PC’s, claro). No fundo sendo o Mantle menos genérico pode ser mais  completo, e como sabemos o DirectX 12 será algo que poderá ser usado por placas Nvidia, AMD e mesmo GPUs de aparelhos móveis, ou seja por várias arquitecturas radicalmente diferentes.

Qual é então o grande objectivo do DirectX 12? Acima de tudo ele é pensado a pensar na optimização dos núcleos do CPU e no melhor aproveitamento do mesmo. E esta é a componente mais crucial de um API de baixo nível.

A explicação simplificada de Wardell não é correcta em muitos sentidos, mas aqui não vemos necessidade de corrigir o que é dito. Trata-se, como referido, de uma simplificação da realidade, e o exemplo acaba por ser efectivamente uma boa explicação simplificada.

Onde, a nosso ver, Wardell falha é pontualmente, como na parte em que refere que os ganhos não serão de 40%, mas sim superiores e que essa é a realidade que experimentou com o Mantle e que presume vir igualmente a existir com o DirectX.

Ora é certo que o DirectX 12 vai permitir ganhar CPU. É aliás com esse intuito que ele foi criado. E com mais CPU, teremos igualmente mais situações processadas pelo mesmo. Os ganhos podem efectivamente ser grandes e de 100 ou até de 200%. Mas  há que explicitar que estes ganhos são em situações específicas, e não em todos os casos.

Se alguém se der ao trabalho de pesquisar benchmarks com e sem o Mantle perceberá essa realidade.

Vejam por exemplo, este artigo:

No primeiro teste, em Battlefield 4, o ganho foi de cerca de 16%. Poderá ser (e será certamente), superior em alguns mapas, mas o valor apenas serve para mostrar a realidade que falamos. Nem sempre os ganhos são abismais!

Sniper Elite mostra um ganho em tudo semelhante. Os mesmos cerca de 16%.

Já em Thief o ganho é maior: 30%, e é efectivamente no jogo da empresa de Brad Wardell, Star Swarm, que os ganhos são maiores, chegando aos 74%.

Isto não impede que, como referido, haja ganhos nos mesmos jogos de mais. Basta mudar o nível dentro de um mesmo jogo, e dependendo da cena ser mais ou menos dependente do CPU o ganho é variável. No caso de Star Swarm, chegamos em tempos a ver benchmarks com ganhos de 300%. Mas isto em situações onde a placa gráfica ou outro elemento não era limitador e apenas o CPU se revelava o elemento restritivo. São casos pontuais, mas que no final e na maior parte do jogos acabam por trazer ganhos que em média não são assim tão abismais como isso. E para eles serem maiores e efectivos há que se programar pensando especificamente em apostar nas situações onde os ganhos podem existir. Uma situação que normalmente só acontece na programação dedicada das consolas, e onde se pensa o jogo para a consola e não em adaptar a consola ao jogo.

No entanto, pouco ou muito, sendo ganho… é bem vindo.

Procurando por outras situações onde o artigo é relevante, Wardell fala de seguida nos ganhos que um API deste tipo poderá trazer a nível de Cloud Computing. A libertação de mais CPU pode permitir o seu uso para outras coisas, incluindo o executar de máquinas virtuais, algo útil no Cloud Computing. Mas este raciocínio fica-se por algumas linhas uma vez que os ganhos deste tipo passariam por Clouds de placas gráficas, algo a maior parte das Clouds, incluindo a Azure da Microsoft não possuem uma vez que são constituídas por CPUs.

Resumindo, no que toca a ganhos de Cloud Computing trazidos por um API de baixo nível (e não necessáriamente apenas pelo DX 12), a teoria estará lá… a prática será outra coisa.

Igualmente relevante é a secção “It’s not magic” ou “Não é magia“, onde há a referência ao facto que os APIs de baixo nível requerem programação de baixo nível. Ou seja, não se pode esperar que um jogo existente ganhe com eles, uma vez que eles nunca foram programados para isso. Esta é uma situação que já explicamos aqui na PCManias por várias vezes.

Curiosamente, aqui Wardell retrata-se um pouco das afirmações anteriores, dando agora a perceber o que não tinha dado antes, e que estivemos anteriormente a explicar: Que o DirectX 12 só trará ganhos em situações onde o CPU é o elemento limitador.

Wardell refere igualmente que com as novas placas gráficas da Nvidia é difícil encontrar um caso onde os jogos sejam limitados pelo GPU. Uma situação que apesar de correcta, por ser uma simplificação, esquece outras realidades: Não só o mercado não é totalmente constituído pelas novas placas gráficas da Nvidia, existindo outros fabricantes, como a maior parte dele é constituído por placas gráficas mais antigas e lentas. Esquece ainda que CPU e GPU não são as únicas limitações do sistema, e outras tais como quantidade de memória e as larguras de banda internas ou mesmo nos canais de comunicação são igualmente realidades.



Mas é exactamente nesta secção “It’s not magic” que Wardell tem a frase que menos compreendemos em todo o artigo. Acredito que no fundo tal se deve às suas desejadas simplificações que neste caso se revelam… simplificações a mais.. Vejamos a seguinte frase:



Terceiro, se és um fan Xbox One, não assumam que isto dará superioridade à XBO. Na altura em que usarem isto, podem ter a certeza que a Sony terá uma resposta.

E sobre esta frase nem sei bem o que pensar.

Para começar o DirectX 12 é uma realidade desde já na consola da Microsoft. Não se chama DirectX 12, não é o DirectX 12, não  inclui todas as situações que o DirectX 12 implementará quando for lançado e que trará certamente alguns ganhos adicionais. Mas é um API que possui implementado já as características principais do DirectX 12. Já escrevemos sobre isso e a Microsoft nunca o escondeu. O slide de baixo diz respeito à situação da Mono driver, a driver de baixo nível que implementa o API da consola, em finais de 2013. Nessa altura a driver estava restrita às equipas internas da Microsoft, mas está agora liberada no SDK para todos, e já em 2013 podemos ver que o D3D resource Overhead (a sobrecarga no CPU), estava perto do zero.

Esse é o motivo pelo qual Phil Spencer veio publicamente referir que não esperem que o DX 12 mude o jogo. Os ganhos serão uma realidade, mas ele não é uma novidade na Xbox One. Aliás, como a Microsoft referiu, foi graças à sua criação para a Xbox One que o mesmo foi adaptado para PC.

Daí que não se compreende a referência de Wardell. Porque a versão final do Dx 12 trará ganhos, sim, mas nunca será o mesmo que nos PCs onde se passa da “água para o vinho”. E isso não deveria ser novidade para ninguém nesta fase.

Mas há outra referência surpreendente na frase de Wardell. A indicação de que a Sony terá uma resposta!

É que curiosamente a Sony não a terá! A Sony sempre a teve!

Se há algo que o novo SDK tem vindo a revelar são as sucessivas melhorias ao SDK da Xbox One que lhe tem permitido recuperar terreno. A questão é que a PS4, no campo dos acessos de baixo nível, possuía no seu lançamento, o seu SDK bem mais avançado que a consola da Microsoft. Ao contrário da Microsoft que apenas libertou o seu API de baixo nível no final do primeiro trimestre de 2014, o API da PS4 sempre foi de baixo nível e partilha mesmo muitos semelhanças com o Mantle. Aliás, apesar de o API da PS4 não ser o Mantle, a DICE revelou que o mesmo está ao nível do Mantle e que os dois APIs serão futuramente desenvolvidos em colaboração.

A realidade é que jogos como Assassins Creed Unity só foram possíveis nas consolas devido aos APIs de baixo nível de ambas que tiveram de ser utilizados. O jogo é limitado pelo CPU mesmo nos poderosos i7 topo de gama, pelo que com os comparativamente fracos Jaguar, sem este tipo de acessos o jogo nunca seria possível (isto não invalida que o jogo foi apenas adaptado e nunca programado de raiz para a realidade das consolas).

Finalizemos apenas com uma última correcção ao que Wardell refere no capítulo “A new way of looking at things: Don’t read this because what is read can’t be unread”.

É que Wardell refere que o seguinte:

Guess how many light sources most engines support right now? 20? 10? Try 4. Four. Which is fine for a relatively static scene. But it obviously means we’re a long long way from having true “photo realism”. 

Traduzindo de forma resumida, Wardell refere que a maior parte dos motores actuais suporta apenas 4 fontes de luz.

Ora apesar de na realidade mesmo com o uso de Forward Rendering podermos ter mais do que 4 fontes de luz, a nível de cálculo de luzes dinâmicas, essa é uma realidade que efectivamente limita muitos dos motores (não nos atrevemos porém a dizer que é a maior parte).

O DirectX 12, ao libertar mais CPU, deverá permitir superar essa limitação, colocando em cena mais fontes de luz com sombras dinâmicas, aumentando o foto-realismo.

Mas aqui impõem-se referir que isso pode acontecer mesmo com o actual DirectX 11. Basta para isso que se use Deferred Rendering em vez de Forward Rendering.

Para explicar essa situação, os eventuais interessados podem ler este artigo que mostra que o uso de CPU no Deferred Rendering (composto por deferred lighting e deferred shading) é bastante inferior, pelo que com ele se conseguem muito mais luzes dinâmicas. Como estes Slides de Killzone 2 mostram, o jogo apresenta mais de 100 luzes dinâmicas no ecrã ao mesmo tempo, com 10 delas a emitirem sombras (página 18). E isto na Playstation 3 num jogo de 2009.

É neste campo que a Xbox One ganhará mais, pois o Deferred Shading requer maior uso de memória rápida para o armazenamento do G-Buffer e tem sido exactamente em jogos que usam este método que tem existido o maior limite à resolução, sendo, como já calculamos e explicamos, estes os jogos onde o frame buffer da consola se tem ficado pelos 792p, um problema que será resolvido definitivamente quando os programadores começarem a programar com o DX 12.

Apenas uma nota final: Como Wardell deixou bem claro, será preciso que os jogos sejam programados em baixo nível para poderem tirar partido dos APIs de baixo nível. Ora a questão é que actualmente basicamente nenhum jogo multi plataformas é programado em baixo nível, e quando muito, por questões de necessidade, é depois ajustado. Isso quer dizer que com o PC metido à mistura em 90% dos casos, sem o DirectX 12 nos PCs, nem Xbox One nem Playstation 4 deverão ver nos multi-plataformas as suas potências devidamente exploradas.



Posts Relacionados