¿Hay alguna razón para preferir Direct3D sobre OpenGL?

11

Así que estaba leyendo esto , de alguna manera obtuve la razón por la cual hay muchos más juegos en Microsoft Windows que en cualquier otro sistema operativo. El principal problema presentado fue que Direct3D es preferido sobre OpenGL.

Lo que no entiendo es ¿por qué algún desarrollador sacrificaría la compatibilidad? Eso es simplemente una pérdida financiera para la empresa. Entiendo que OpenGL es un desastre, pero eso no debería ser un problema para los expertos. Incluso si es así, creo que la gente haría un esfuerzo adicional para incurrir en una pérdida financiera.

Además, si no me equivoco, muchas aplicaciones multiplataforma usan Direct3D y OpenGL. Creo que cambian entre las API.

Esto es extraño ya que solo pueden usar OpenGL, ¿por qué preocuparse por Direct3D?

Entonces, la pregunta es, ¿hay algún problema técnico con OpenGL o hay algún soporte que Direct3D proporcione que OpenGL carece?


Soy consciente de que esta pregunta podría cerrarse como fuera de tema o demasiado amplia, hice mi mejor esfuerzo para reducirla.

A --- B
fuente
¿Estás buscando algo diferente a esto ?
trichoplax
2
Por cierto, respondí una pregunta similar en GameDev.SE hace un par de años.
Nathan Reed
1
Aquí hay una buena lección de historia que responde a su pregunta: programmers.stackexchange.com/questions/60544/…
darius
1
@NathanReed "Entonces, es posible que veamos un cambio hacia los desarrolladores multiplataforma que usan OpenGL en Windows". Y ahora, 3 años después, ¿dirías que esto ha sucedido?
Rotem
2
@Rotem No lo creo, no. OGL (y ahora Vulkan) hoy en día es mejor para mantener la paridad de funciones con D3D de lo que era, pero AFAICT, los proveedores de GPU aún priorizan los controladores D3D para la corrección de errores y las mejoras de rendimiento, y la mayoría de los juegos / motores todavía usan D3D por defecto en Windows. Una excepción notable son los motores idTech , que usan OGL en Windows.
Nathan Reed

Respuestas:

9

Sobre el hecho de que hay más juegos para Windows, algunas razones son

  1. Windows tiene la mayoría del mercado y en el pasado desarrollar juegos multiplataforma era más complicado de lo que es hoy.
  2. DirectX viene con herramientas mucho mejores para el desarrollo (por ejemplo, depuración)
  3. Las grandes innovaciones generalmente se crean / implementan primero en DirectX, y luego se portan / implementan en OpenGL.
  4. En cuanto a Windows vs Linux, debe tener en cuenta que cuando existe un estándar real debido a razones de marketing e históricas (para eso vea ¿Por qué los desarrolladores de juegos prefieren Windows? | Software Engineering , como dije en los comentarios), tiene su inercia .

Lo de la inercia es muy importante. Si su equipo se desarrolla para DirectX, apuntando al 90% del mercado (bueno ... si juega juegos en la PC probablemente tiene Windows, entonces ... ¿99% del mercado?), ¿Por qué querría invertir en OpenGL? Si ya se desarrolla en OpenGL, una vez más dirigido al 99% del mercado, lo mantendrá todo el tiempo que pueda. Por ejemplo, Id Tech by Id Software es un excelente motor de juego (que alimenta la serie DOOM) que utiliza OpenGL.

Sobre el tema de su discusión, un comentario.

A partir de hoy, hay muchas API, y una práctica común es utilizar un motor de juego que las abstraiga. Por ejemplo, considere que

  • En la mayoría de las plataformas móviles, debe usar OpenGl ES.
  • En PC puedes usar DirectX y OpenGL
  • Creo que en XBOX tienes que usar DirectX.
  • Creo que en PS usas su propia API.
  • Con hardware antiguo, usa DirectX9 u OpenGL 3, o OpenGL ES 2.
  • Con hardware más reciente, puede (y quiere) usar DirectX 11, OpenGL 4, OpenGL ES 3.

Recientemente, con el advenimiento de las nuevas API de bajo costo, que es un punto de inflexión importante para la programación gráfica, hay DirectX 12 para Windows y XBOX, Metal para iOS y Vulkan (el nuevo OpenGL) para Windows y Linux (incluidos Android y Tizen) )

Todavía hay juegos que solo se dirigen a Windows y XBOX, pero hoy en mi humilde opinión, eso solo puede ser una opción de marketing.

Darius
fuente
Entonces, ¿no hay razones de rendimiento para preferir Direct3D?
A --- B
@ritwik sinha DirectX 11 tiene un mejor soporte para la representación de subprocesos múltiples que OpenGL 4, pero que yo sepa, eso no ha resultado en ninguna diferencia de rendimiento real. Por otro lado, al comparar Windows con DirectX 11 y Linux con OpenGL 4, el ganador fue Linux con OpenGL. Con respecto a DirectX 12 vs Vulkan, creo que es demasiado pronto para saberlo, pero no lo sé.
darius
Nunca trabajé con Direct3D, así que no entiendo lo que quieres decir con subprocesamiento múltiple. Hasta donde yo sé, los programadores manejan diferentes hilos para diferentes tareas. ¿Direct3D hace esto bajo el capó? De todos modos buena respuesta.
A --- B
1
@ritwik sinha, una aplicación de subprocesos múltiples para gráficos en tiempo real es que puede usar subprocesos diferentes para asignar recursos en segundo plano (transmisión de texturas, búferes de vértices), mientras que un subproceso principal realiza las llamadas de sorteo. Esto también es posible en OpenGL, pero muy muy complicado. En DirectX 11 también puede realizar llamadas de extracción, desde muchos hilos, lo que debería mejorar el rendimiento, pero esa no es una práctica común. Creo que la última versión de UnrealEngine4 lo hace. Sin embargo, con DirectX 12 y Vulkan, el renderizado de subprocesos múltiples será un verdadero negocio.
darius
1

Un par de posibles razones:

  • Históricamente, la calidad del controlador OpenGL ha variado mucho, pero ya no estoy seguro de que sea así.
  • Xbox es compatible con D3D, por lo que transferir un juego entre él y la PC es más fácil.
  • Las herramientas de depuración para D3D han sido mejores que para OpenGL. Afortunadamente ahora tenemos RenderDoc
SupervivenciaMáquina
fuente