Existe algum motivo para preferir o Direct3D em vez do OpenGL?

10

Então, eu estava lendo isso e entendi o motivo pelo qual existem muito mais jogos no Windows da Microsoft do que em qualquer outro sistema operacional. A principal questão apresentada foi que o Direct3D é preferível ao OpenGL.

O que eu não entendo é por que algum desenvolvedor sacrificaria a compatibilidade? Isso é simplesmente uma perda financeira para a empresa. Entendo que o OpenGL é uma bagunça, mas isso dificilmente deve ser um problema para especialistas. Mesmo que seja, acho que as pessoas percorreriam uma milha extra do que sofrer uma perda financeira.

Além disso, se não estou errado, muitos aplicativos de plataforma cruzada usam o Direct3D e o OpenGL. Eu acho que eles alternam entre as APIs.

É estranho, pois eles podem usar o OpenGL, por que se preocupar com o Direct3D?

Portanto, a questão é: há algum problema técnico com o OpenGL ou há algum suporte que o Direct3D fornece que o OpenGL não possui?


Estou ciente de que essa pergunta pode ser encerrada como fora de tópico ou muito ampla; tentei o meu melhor para reduzi-la.

A --- B
fonte
Você está procurando algo diferente disso ?
Trichoplax
2
BTW, eu respondi uma pergunta semelhante no GameDev.SE alguns anos atrás.
Nathan Reed
1
aqui está uma boa lição de história que sorta responder à sua pergunta: programmers.stackexchange.com/questions/60544/...
darius
1
@NathanReed "Então, é possível ver um retorno aos desenvolvedores de várias plataformas usando o OpenGL no Windows." E agora, 3 anos depois, você diria que isso aconteceu?
Rotem 29/06
2
@ Rotem Acho que não, não. O OGL (e agora o Vulkan) hoje é melhor em manter a paridade de recursos com o D3D do que era, mas a AFAICT, os fornecedores de GPU ainda priorizam os drivers do D3D para correções de bugs e melhorias de desempenho, e a maioria dos jogos / mecanismos ainda usa o D3D por padrão no Windows. Uma exceção notável são os mecanismos da idTech , que usam o OGL no Windows.
Nathan Reed

Respostas:

9

Sobre o fato de haver mais jogos para Windows, alguns motivos são

  1. O Windows tem a maior parte do mercado e, no passado, desenvolver jogos multiplataforma era mais complicado do que é hoje.
  2. O DirectX vem com ferramentas muito melhores para o desenvolvimento (por exemplo, depuração)
  3. Geralmente, grandes inovações são criadas / implementadas no DirectX e depois transportadas para / implementadas no OpenGL.
  4. Quanto ao Windows x Linux, você deve considerar que, quando existe um padrão real devido a razões de marketing e históricas (para isso, consulte Por que os desenvolvedores de jogos preferem o Windows? | Engenharia de Software , como eu disse nos comentários), ele tem sua inércia .

A coisa da inércia é muito importante. Se sua equipe desenvolve para o DirectX, visando 90% do mercado (bem ... se você joga no PC, provavelmente tem janelas, então ... 99% do mercado?), Por que você gostaria de investir no OpenGL? Se você já desenvolve o OpenGL, visando novamente 99% do mercado, continuará o máximo que puder. Por exemplo, o Id Tech da Id Software é um excelente mecanismo de jogo (alimentando a série DOOM) que usa o OpenGL.

Sobre o tópico da sua discussão, um comentário.

Atualmente, existem muitas APIs e uma prática comum é usar um Game Engine que abstraia sobre elas. Por exemplo, considere que

  • Na maioria das plataformas móveis, você precisa usar o OpenGl ES.
  • No PC, você pode usar o DirectX e o OpenGL
  • Eu acho que no XBOX você precisa usar o DirectX.
  • Eu acho que no PS você usa sua própria API.
  • Com o hardware antigo, você usa o DirectX9 ou o OpenGL 3 ou o OpenGL ES 2.
  • Com o hardware mais recente, você pode (e deseja) usar o DirectX 11, OpenGL 4, OpenGL ES 3.

Recentemente, com o advento das novas APIs de baixo custo adicional - que é um importante ponto de virada para a programação gráfica -, existem DirectX 12 para Windows e XBOX, Metal para iOS e Vulkan (o novo OpenGL) para Windows e Linux (incluindo Android e Tizen )

Ainda existem jogos que visam apenas Windows e XBOX, mas hoje o IMHO pode ser apenas uma opção de marketing.

darius
fonte
Portanto, não há razões de desempenho para preferir o Direct3D?
A --- B
@ritwik sinha O DirectX 11 tem melhor suporte para renderização multiencadeamento do que o OpenGL 4, mas que eu saiba que não resultou em nenhuma diferença de desempenho realt. Por outro lado, comparando o Windows com o DirectX 11 e o Linux com o OpenGL 4, o vencedor foi o Linux com o OpenGL. Em relação ao DirectX 12 vs Vulkan, acho que é muito cedo para saber, mas não sei.
darius
eu nunca trabalhei com o Direct3D, então não entendo o que você quer dizer com multi threading. Tanto quanto eu sei, diferentes threads são tratados pelos programadores para diferentes tarefas. O Direct3D faz isso sob o capô? Enfim, boa resposta.
A --- B
1
@ritwik sinha uma aplicação de multi-threading para gráficos em tempo real é que você pode usar threads diferentes para alocar recursos diferentes (background streaming de textura, buffers de vértices), enquanto um thread principal faz as chamadas de desenho. Isso também é possível no OpenGL, mas muito, muito complicado. No DirectX 11, você também pode fazer chamadas de draw, de vários threads, o que deve melhorar o desempenho, mas isso não é uma prática comum. Eu acho que a última versão do UnrealEngine4 faz isso. No entanto, com a renderização multi-threading do DirectX 12 e Vulkan será um negócio real.
darius
1

Algumas razões possíveis:

  • Historicamente, a qualidade do driver OpenGL variou muito, mas não tenho mais certeza de que é esse o caso.
  • O Xbox suporta D3D, portanto, é mais fácil portar um jogo entre ele e o PC.
  • As ferramentas de depuração para o D3D foram melhores do que para o OpenGL. Felizmente agora temos o RenderDoc
SurvivalMachine
fonte