Pour les jeux 2D, y a-t-il une raison de NE PAS utiliser une API 3D comme Direct3D ou OpenGL?

20

Je suis sorti du hobby Game Development depuis un bon moment maintenant. À l'époque où je l'ai fait, la plupart des gens utilisaient Direct Draw pour créer des jeux 2D. Au moment où je me suis arrêté, les gens disaient que OpenGL ou Direct3D avec une projection orthogonale était juste la voie à suivre.

Je pense à me remettre à créer des jeux 2D, notamment sur téléphone mobile mais peut-être aussi sur la plateforme XNA. Pour créer quelque chose en utilisant OpenGL, j'aurais (espérons-le) une petite courbe d'apprentissage pour m'acclimater au développement 3D.

Y a-t-il une raison de sauter cela et de travailler à la place avec un cadre 2D où j'ai juste un tampon de cadre Largeur x Hauteur que je dois remplir avec des pixels?

Eric Palakovich Carr
la source
Cette question est en fait fausse ... Je veux dire: Direct3D et OpenGL ne sont vraiment pas des API 3D, n'est-ce pas? Ils offrent une accélération matérielle, mais en 2D et en 3D. Il y a là une légère différence.
jacmoe

Réponses:

20

Vous devriez certainement utiliser quelque chose qui utilise un rendu 3D sur le backend. Mais dans votre code de niveau supérieur, vous ne devriez même pas voir l'axe Z. Tout cela devrait être résumé aux niveaux inférieurs. Si vous manipulez directement des pixels, vous faites probablement quelque chose de mal.

Pour mes propres jeux, j'ai construit un ensemble de classes pour traiter des objets 2D. Ma logique de jeu ne concernait que les coordonnées x et y. Mes cours ont également géré des choses comme la rotation, la mise à l'échelle, les modes de fusion, etc., etc.

Bien sûr, il existe également des bibliothèques 2D existantes que vous pouvez également utiliser - Cocos2D est populaire sur l'iPhone. La plupart, sinon la totalité, de ces bibliothèques seront construites sur les API 3D de niveau inférieur afin qu'elles bénéficient de l'accélération disponible.

Dennis Munsie
la source
Je serais intéressé d'entendre comment xna gère l'API 2D dans les coulisses
Iain
5
C'est tout en 3D à la fin. Spritebatch, le cheval de bataille de rendu 2D, est un effet de shader.
drxzcl
+1 pour découpler l'interface de l'implémentation.
Steve S
@Iain Voici une implémentation XNA dans DirectX11 écrite par les auteurs XNA xnatoolkit.codeplex.com .
ClassicThunder
8

Il y a une raison pour ne pas utiliser l'API 3D.

Seuls les ordinateurs en Amérique du Nord, dans le nord-ouest de l'UE et au Japon les prennent en charge ...

J'habite au Brésil par exemple, mon ordinateur sœur est nouveau, possède un processeur multicœur, plusieurs Go de RAM, et pourtant il ne fonctionne pas avec les jeux OpenGL.

Par exemple, je ne peux jouer à Dwarf Fortress (utiliser OpenGL pour rendre les graphiques ASCII) sur mon propre ordinateur, sur tout autre ordinateur que je trouve qu'il fonctionne lentement.

Et ce n'est pas un problème uniquement avec le Brésil, ai-je demandé aux gens autour, et c'est courant dans plusieurs endroits du monde ... La population qui possède réellement des cartes compatibles OpenGL ou Direct3D est une minorité ...

Seulement que cette minorité attire plus l'attention des entreprises ...

Mais si vous ne ciblez que ces marchés "traditionnels" (NA, Northwest EU, JP), alors foncez!

MODIFIER pour les votes en aval: Évidemment, vous n'êtes pas d'accord, alors, avez-vous la preuve que personne ne livre plus d'ordinateurs avec des puces VIA ou SIS (ou même d'autres fabricants inconnus ou pires) avec aucun ou seulement le support d'OpenGL 1.0?

J'ai deux machines comme ça dans ma maison, et elles sont nouvelles (les deux ont plus d'un cœur, les deux ont 2 Go de RAM, les deux ont une fréquence d'horloge supérieure à 2 GHz ...)

Mon université a 200 machines comme ça, même certaines construites par Dell.

C'est tout simplement simple, les GPU sont chers (même les Intel merdiques), et dans les marchés pauvres, c'est un luxe, les gens qui achètent des machines pour exécuter MS Word et lire des e-mails ne vont pas acheter une machine avec une puce graphique décente quand ils peuvent en acheter un qui coûte 50 USD moins cher, surtout lorsque 50 USD sont ce que la plupart des gens doivent acheter de la nourriture pendant un mois entier.

S'IL VOUS PLAÎT, ne venez pas ici en disant que je dis BS, si vous n'avez jamais visité un pays du tiers monde, et aussi, ne dites pas que les pays du tiers monde ne jouent pas à des jeux, ils le font, beaucoup, Osmos Le post du développeur sur le lancement de la version Linux de leur, a souligné que beaucoup de trafic entrant (en fait, la plupart) provenait de Russie, simplement parce que ces personnes sont généralement ignorées.

Ici au Brésil, le jeu le plus populaire est Counter-Strike, fonctionnant en mode logiciel ... Certaines Lan-Houses ne possèdent que 10% des machines avec GPU, même les grosses fesses avec 200 voire 300 stations ...

Je n'aurais pas dû poster à ce sujet, je savais que cela attirerait des votes négatifs, j'ai perdu gratuitement des points pour avoir posté cela, chaque fois que j'explique pourquoi mon autre jeu utilise Allegro 4.4 au lieu de 5.0 car 5.0 ne prend pas en charge Direct Draw ou mode logiciel Je reçois beaucoup de critiques de beaucoup de gens qui disent que je suis une sorte de menteur ou que je suis stupide de dire cette vérité sur la disponibilité réelle de l'accélération OpenGL.

EDIT 2: Pour pouvoir jouer et développer des jeux avec OpenGL, j'ai dû supplier mes parents et d'autres personnes de m'acheter une GeForce 8600 (c'était la carte la moins chère que j'ai trouvée qui pouvait encore exécuter Mass Effect 1 et d'autres UT3 -moteurs), ils m'en ont acheté un, mais maintenant je suis plusieurs années sans jamais avoir d'autres cadeaux, pas même des cadeaux d'anniversaire, à cause de son prix, et j'espère que cette carte fonctionnera encore 3 ou 4 ans ...

EDIT 3:
Un exemple pratique: Eletronic Arts a fait un nouveau client pour Ultima Online qui utilise l'accélération 3D pour ses graphiques 2D ... Résultat: Beaucoup de joueurs se plaignent de fréquences d'images ridiculement basses et EA recule dans leur décision d'imposer l'utilisation le nouveau client (maintenant il est permis de continuer à utiliser l'ancien)

EDIT 4 en 2015: Cette réponse sera laissée ici principalement comme un artefact historique, actuellement la quantité d'ordinateurs avec des puces extrêmement merdiques est faible même dans les pays du tiers monde, ils existent toujours, en particulier dans les ordinateurs de bureau, mais ils ne le sont pas plus courant, je ne pense plus que cela vaut la peine de travailler avec des API en mode logiciel, les API basées sur OpenGL sont la voie à suivre maintenant.

speeder
la source
3
Il n'y a pas de puces qui ne prennent pas en charge la 3D aujourd'hui. Très probablement, vous avez juste besoin de mettre à jour les pilotes, car ceux fournis par Windows ne sont pas pris en charge par OpenGL. Le GPU de merde le plus courant est Intel GMA et même celui-ci a une prise en charge OpenGl de base.
Axel Gneiting
1
Répéter encore une fois: les puces ici sont pires que les trucs Intel GMA. Et oui, certains pilotes modifiés résolvent le problème, mais vous ne pouvez pas vous attendre à ce que les utilisateurs le sachent.
speeder
Un exemple pratique: Eletronic Arts a fait un nouveau client pour Ultima Online qui utilise l'accélération 3D pour ses graphismes 2D ... Résultat: Beaucoup de joueurs se plaignent de fréquences d'images ridiculement basses et EA recule dans leur décision d'imposer l'utilisation du nouveau client (maintenant il est permis de continuer à utiliser l'ancien)
speeder
1
Le nouveau client date de 2008, ce que mon histoire dit: les gens en 2008, détestaient un client OpenGL et sont revenus à celui de 1997.
speeder
1
Ce n'est pas parce que les gens ne mettent pas à jour leurs pilotes que leurs ordinateurs ne prennent pas en charge OpenGL et Direct3D. L'OP doit simplement vérifier la compatibilité OpenGL / Direct3D. Si ce n'est pas le cas, il doit demander à l'utilisateur de mettre à jour ses pilotes. Cela fonctionnera dans 98,6% des cas, probablement même dans les deuxième et troisième mondes. Sérieusement, pouvez-vous vous connecter à un ordinateur que vous pouvez acheter qui ne prend pas en charge OpenGL / Direct3D?
Avi
3

Non, il n'y en a pas. Vous obtiendrez de meilleurs effets et un rendu plus rapide en utilisant un rendu 3D. Par exemple, voici un jeu 2d que j'ai fait il y a quelques semaines (en un week-end) - les effets orbes s'appuient fortement sur les shaders 3D, même si à bien des égards ce sont des effets 2d. De même, j'ai fait un usage intensif de la technologie de rendu disponible pour ce jeu - il y a trois ou quatre effets de pixel shader différents, ce qui me permet de développer plus rapidement et de le rendre plus joli.

Embrassez le 3d et aimez-le, mais aimez-le avec un axe de moins.

ZorbaTHut
la source
2

Les API 3D sont généralement la voie à suivre. Les GPU d'aujourd'hui sont conçus pour restituer des graphiques 3D, vous garantissant ainsi des performances assez solides. Et comme l'a dit ZorbaTHut, suivre l'itinéraire 3D vous permet de profiter de choses comme les pixel shaders.

Il n'y a vraiment plus autant d'API 2D. DirectDraw est obsolète et la plupart des bibliothèques 2D / vectorielles utilisent OpenGL ou Direct3D pour effectuer leur rendu de toute façon. Même les boîtes à outils d'interface utilisateur modernes exploitent les API 3D pour effectuer leur rendu et leur composition. Prenons l'exemple de WPF (le dernier framework d'interface utilisateur de Microsoft): il utilise Direct3D pour le rendu.

Mike Strobel
la source
2

Il existe encore un nombre surprenant de machines vraiment anciennes avec une accélération 3D merdique / inexistante et des pilotes qui n'ont jamais été mis à jour, de sorte que l'utilisation de DirectDraw sera toujours beaucoup plus rapide qu'OpenGL ou D3D. J'ai vécu cela en travaillant sur un jeu multijoueur 2D qui a environ 10 ans maintenant lorsque j'ai essayé d'écrire un nouveau backend de rendu dans OpenGL pour prendre en charge d'autres plates-formes. De nombreux joueurs ont signalé que le mode OpenGL n'était pas jouable en raison de la faible fréquence d'images. Je serais également d'accord avec l'affiche brésilienne que c'est plus courant en dehors des États-Unis et de l'Europe, mais c'est toujours vrai dans ces endroits également.

Si vous ciblez les téléphones mobiles ou XNA, utilisez définitivement la 3D. Mais si vous voulez faire un jeu qui s'exécute sur n'importe quel PC, n'importe où, je dirais que je m'en tiens à DDraw.


la source
1

La seule chose à laquelle je peux penser est que l'utilisation d'une API 3D par rapport à une API 2D ajoute une certaine complexité de base. Dans OpenGL au moins, vous devez charger et gérer les textures, et lorsque vous les dessinez, vous devez obtenir la bonne géométrie. Une couche wrapper résout ces problèmes.

Cela dit, l'utilisation d'un back-end graphique 3D semble avoir plus d'avantages que d'inconvénients, donc si vous me demandez, cela en vaut la peine.

Tung Nguyen
la source
1

Si votre jeu est assez simple et que vous voulez qu'il fonctionne bien sur les machines bas de gamme, en particulier les netbooks et les ordinateurs portables plus anciens (sans accélération 3D, ou très minime - les anciens graphiques intégrés Intel, etc.), cela vaut toujours la peine d'envisager une version pure Approche de framebuffer 2D

Si vous êtes satisfait que le jeu nécessite au moins une carte / puce ATi / NVidia bas de gamme, alors utiliser une API 3D vous permettra de faire beaucoup de choses intéressantes (mélange alpha, mise à l'échelle / rotation, etc.) qui serait difficile à faire bien / efficacement dans un moteur de rendu pur.

Sachez également que certaines choses très simples en «2D pur» deviennent plus intéressantes lorsque du matériel 3D (et filtrage bilinéaire / mélange alpha) est impliqué. Comprendre le concept d'alpha prémultiplié. Et pensez également, par exemple, à la façon dont vous géreriez les joints entre les carreaux dans un tilemap 2D si vous vouliez une vue zoomable / rotative.

N'oubliez pas non plus que le taux de remplissage est limité. Et il est étonnamment facile d'atteindre ces limites en 2D. Vous n'avez peut-être pas beaucoup de polygones, mais si vous voulez beaucoup de couches de parallaxe alpha-mélangées, ou des particules, ou des effets de post - vous pouvez assez facilement finir par remplir autant de pixels qu'un jeu 3D assez haut de gamme.

Mais en général, le matériel 3D est génial, et le mélange additif est votre ami :)

bluescrn
la source