Para juegos 2D, ¿hay alguna razón para NO usar una API 3D como Direct3D u OpenGL?


20

He estado fuera del hobby Game Development durante bastante tiempo. Cuando lo hice, la mayoría de la gente usaba Direct Draw para crear juegos en 2D. Cuando paré, la gente decía que OpenGL o Direct3D con una proyección ortogonal es el camino a seguir.

Estoy pensando en volver a crear juegos en 2D, en particular en el teléfono móvil, pero quizás también en la plataforma XNA. Para hacer algo usando OpenGL, tendría una pequeña curva de aprendizaje (con suerte) para acostumbrarme al desarrollo 3D.

¿Hay alguna razón para omitir eso y, en su lugar, trabajar con un marco 2D donde solo tengo un búfer de marco Ancho x Altura que necesito llenar con píxeles?


Esta pregunta es realmente incorrecta ... Quiero decir: Direct3D y OpenGL realmente no son API 3D, ¿verdad? Están ofreciendo aceleración de hardware, pero en 2D y 3D. Hay una ligera diferencia allí.
jacmoe

Respuestas:


20

Definitivamente deberías estar usando algo que use un renderizador 3D en el backend. Pero en su código de nivel superior, ni siquiera debería ver el eje Z. Todo eso debería abstraerse en los niveles inferiores. Si está manipulando píxeles directamente, probablemente esté haciendo algo mal.

Para mis propios juegos, creé un conjunto de clases para tratar con objetos 2D. Mi lógica de juego solo se refería a las coordenadas x e y. Mis clases también manejaron cosas como rotación, escalado, modos de fusión, etc., etc.

Por supuesto, también hay bibliotecas 2D existentes que puede usar también: Cocos2D es una popular en el iPhone. La mayoría, si no todas, de estas bibliotecas se construirán sobre las API 3D de nivel inferior para que se beneficien de la aceleración disponible.


Me interesaría saber cómo xna maneja la 2d api detrás de escena
Iain

55
Todo es 3D al final. Spritebatch, el caballo de batalla de renderizado 2D, es un efecto de sombreado.
drxzcl

+1 para desacoplar la interfaz de la implementación.
Steve S

@Iain Aquí hay una implementación de XNA en DirectX11 escrita por los autores de XNA xnatoolkit.codeplex.com .
ClassicThunder

8

Hay una razón para no usar la API 3D.

Solo las computadoras en NA, noroeste de la UE y Japón los admiten ...

Vivo en Brasil, por ejemplo, mi computadora hermana es nueva, tiene un procesador multinúcleo, varios GB de RAM y, sin embargo, no ejecuta juegos OpenGL.

Por ejemplo, solo puedo jugar a Dwarf Fortress (usar OpenGL para representar gráficos ASCII) en mi propia computadora, en cualquier otra computadora, creo que funciona lentamente.

Y esto no es un problema solo con Brasil, le pregunté a la gente de todo, y es común en varios lugares del mundo ... La población que realmente posee tarjetas compatibles con OpenGL o Direct3D es una minoría ...

Solo que esta minoría recibe más atención de las empresas ...

Pero si solo se dirige a estos mercados "tradicionales" (NA, Noroeste de la UE, JP), ¡adelante!

EDITAR para aquellos que votan negativamente: Obviamente no está de acuerdo, entonces, ¿tiene PRUEBA de que NADIE envía más computadoras con chips VIA o SIS malos (o incluso otros fabricantes desconocidos o peores) con ninguno o solo soporte OpenGL 1.0?

Tengo DOS máquinas como esa en mi casa, y son nuevas (ambas tienen más de un núcleo, ambas tienen 2 GB de RAM, ambas tienen una frecuencia de reloj superior a 2 GHz ...)

Mi universidad tiene 200 máquinas como esa, incluso algunas construidas por Dell.

Es simple, las GPU son caras (incluso las de Intel), y en los mercados pobres, es un lujo, las personas que compran máquinas para ejecutar MS Word y leer correos electrónicos no van a comprar una máquina con un chip gráfico decente cuando pueden comprar uno que es 50 USD más barato, especialmente cuando 50 USD es lo que la mayoría de la gente tiene para comprar alimentos durante todo un mes.

POR FAVOR, no vengas aquí diciendo que estoy diciendo BS, si nunca visitaste un país del tercer mundo, y tampoco digas que la gente del país del tercer mundo no juega, lo hacen, mucho, Osmos La publicación del desarrollador sobre el lanzamiento de su versión de Linux, señaló que gran parte del tráfico entrante (en realidad, la mayor parte) era de Rusia, simplemente porque esas personas generalmente son ignoradas.

Aquí en Brasil, el juego más popular es Counter-Strike, que se ejecuta en modo Software ... Algunas Lan-Houses tienen solo el 10% de las máquinas con GPU, incluso las más grandes con 200 o incluso 300 estaciones ...

No debería haber publicado sobre esto, sabía que atraería votos negativos, obtuve una pérdida de puntos gratuita por publicar esto, cada vez que explico por qué mi otro juego usa Allegro 4.4 en lugar de 5.0 porque 5.0 no admite Direct Draw o modo de software Recibo muchas críticas de muchas personas que dicen que soy una especie de mentiroso o que soy estúpido por decir esta verdad sobre la disponibilidad real de la aceleración de OpenGL.

EDIT 2: para poder jugar y desarrollar juegos que tienen OpenGL, tuve que rogar a mis padres y a otras personas que me compraran una GeForce 8600 (esa fue la tarjeta más barata que encontré que aún podía ejecutar Mass Effect 1 y otros UT3 - juegos de motor), me compraron uno, pero ahora llevo varios años sin volver a recibir otros regalos, ni siquiera regalos de cumpleaños, por lo costoso que fue, y espero que esta tarjeta funcione por más de 3 o 4 años ...

EDITAR 3:
Un ejemplo práctico: Eletronic Arts creó un nuevo cliente para Ultima Online que usa aceleración 3D para sus gráficos 2D ... Resultado: muchos jugadores se quejan de velocidades de fotogramas ridículamente bajas y EA retrocede en su decisión de exigir el uso de el nuevo cliente (ahora se le permite permanecer usando el antiguo)

EDIT 4 en 2015: esta respuesta se dejará aquí principalmente como un artefacto histórico, actualmente la cantidad de computadoras con chips extremadamente malos es baja incluso en países del tercer mundo, todavía existen, especialmente en computadoras orientadas a la oficina, pero no son tan más común, ya no creo que valga la pena trabajar con API en modo software, las API basadas en OpenGL son el camino a seguir ahora.


3
No hay chips que no sean compatibles con 3D hoy en día. Lo más probable es que solo necesite actualizar los controladores, ya que los que proporciona Windows no incluyen compatibilidad con OpenGL. La GPU basura más común es Intel GMA e incluso eso tiene un soporte básico de OpenGl.
Axel Gneiting

1
Repitiendo de nuevo: los chips aquí son PEOR que las cosas de Intel GMA. Y sí, algunos controladores modificados resuelven el problema, pero no puede esperar que los usuarios lo sepan.
Speeder

Un ejemplo práctico: Eletronic Arts creó un nuevo cliente para Ultima Online que utiliza la aceleración 3D para sus gráficos 2D ... Resultado: muchos jugadores se quejan de velocidades de fotogramas ridículamente bajas y EA retrocede en su decisión de exigir el uso del nuevo cliente (ahora está permitido permanecer usando el viejo)
deslizador

1
El nuevo cliente es de 2008, lo que dice mi historia es: La gente en 2008, no le gustó un cliente OpenGL y volvió a usar el de 1997.
Speeder

1
El hecho de que las personas no actualicen sus controladores no significa que sus computadoras no sean compatibles con OpenGL y Direct3D. El OP solo debe verificar la compatibilidad con OpenGL / Direct3D. Si no está allí, debe decirle al usuario que actualice sus controladores. Esto funcionará en el 98.6% de los casos, probablemente incluso en el segundo y tercer mundo. En serio, ¿puedes vincular a una computadora que puedes comprar que carece de soporte OpenGL / Direct3D?
Avi

3

No, no hay Obtendrá mejores efectos y una representación más rápida mediante el uso de un renderizador 3D. Por ejemplo, aquí hay un juego 2D que hice hace unas semanas (en un fin de semana): los efectos de orbe se apoyan mucho en los sombreadores 3D, aunque en muchos sentidos son efectos 2D. Del mismo modo, hice un uso extensivo de la tecnología de renderizado disponible para este juego : hay tres o cuatro efectos de sombreado de píxeles diferentes, todo lo cual me permite desarrollarme más rápido y hacerlo más bonito.

Abraza el 3d y ámalo, pero ámalo con un eje menos.


2

Las API 3D son generalmente el camino a seguir. Las GPU de hoy están diseñadas para representar gráficos en 3D, por lo que se garantiza un rendimiento bastante sólido. Y como dijo ZorbaTHut, seguir la ruta 3D le permite aprovechar cosas como los sombreadores de píxeles.

Realmente ya no hay tantas API 2D por ahí. DirectDraw ha quedado en desuso, y la mayoría de las bibliotecas basadas en 2D / vector utilizan OpenGL o Direct3D para realizar su representación de todos modos. Incluso los kits de herramientas de UI modernos están aprovechando las API 3D para hacer su renderizado y composición. Tome WPF (el último marco de UI de Microsoft) por ejemplo: usa Direct3D para renderizar.


2

Todavía hay una cantidad sorprendente de máquinas realmente antiguas con aceleración 3D deficiente / inexistente y controladores que nunca se han actualizado, de modo que usar DirectDraw seguirá siendo mucho más rápido que OpenGL o D3D. Experimenté esto mientras trabajaba en un juego multijugador en 2D que tiene aproximadamente 10 años cuando intenté escribir un nuevo backend de renderizado en OpenGL para admitir otras plataformas. Muchos jugadores informaron que el modo OpenGL no se podía reproducir debido a las bajas tasas de fotogramas. También estaría de acuerdo con el póster brasileño en que esto es más común fuera de los Estados Unidos y Europa, pero también es cierto en esos lugares.

Si está apuntando a teléfonos móviles o XNA, definitivamente use 3D. Pero si quieres hacer un juego que se ejecute en cualquier PC, en cualquier lugar, yo diría que quédate con DDraw.


1

Lo único en lo que puedo pensar es que usar una API 3D sobre una 2D agrega cierta complejidad básica. Al menos en OpenGL, debe cargar y administrar texturas, y cuando las dibuja necesita obtener la geometría correcta. Una capa de contenedor resuelve estos problemas.

Dicho esto, el uso de un back-end de gráficos en 3D parece tener más ventajas que desventajas, por lo que si me preguntas, vale la pena el esfuerzo.


1

Si su juego es lo suficientemente simple y desea que se ejecute bien en máquinas de gama baja, en particular netbooks y computadoras portátiles más antiguas (sin aceleración 3D o muy mínimo: gráficos integrados Intel más antiguos, etc.), todavía vale la pena considerar un puro Enfoque de framebuffer 2D

Si está contento de que el juego requiera al menos una tarjeta / chip ATi / NVidia de gama baja, usar una API 3D le permitirá hacer muchas cosas interesantes (mezcla alfa, escala / rotación, etc.) que sería difícil hacerlo bien / eficientemente en un procesador de software puro.

Además, tenga en cuenta que algunas cosas que son muy simples en '2D puro' se vuelven más interesantes cuando está involucrado el hardware 3D (y el filtrado bilineal / mezcla alfa). Comprender el concepto de alfa premultiplicado. Y también piense, por ejemplo, en cómo manejaría las uniones entre los mosaicos en un mapa de mosaicos 2D si quisiera una vista con zoom / giratoria.

También recuerde que el índice de llenado es limitado. Y es sorprendentemente fácil alcanzar esos límites en 2D. Es posible que no tenga muchos polígonos, pero si desea muchas capas de paralaje mezcladas alfa, o partículas, o efectos posteriores, puede terminar fácilmente llenando tantos píxeles como un juego 3D bastante avanzado.

Pero en general, el hardware 3D es increíble, y la combinación aditiva es tu amiga :)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.