Para jogos 2D, existe algum motivo para NÃO usar uma API 3D como Direct3D ou OpenGL?

20

Estou fora do hobby de Desenvolvimento de Jogos há um bom tempo. Quando eu fiz isso, a maioria das pessoas usava o Direct Draw para criar jogos 2D. Quando parei, as pessoas estavam dizendo que o OpenGL ou Direct3D com uma projeção ortogonal é o caminho a percorrer.

Estou pensando em voltar a criar jogos 2D, principalmente no celular, mas talvez também na plataforma XNA. Para criar algo usando o OpenGL, eu teria uma pequena curva de aprendizado (esperançosamente) para me acostumar ao desenvolvimento 3D.

Existe alguma razão para ignorar isso e, em vez disso, trabalhar com uma estrutura 2D em que eu apenas tenho um buffer de quadro Largura x Altura que preciso preencher com pixels?

Eric Palakovich Carr
fonte
Esta pergunta está realmente errada ... Quero dizer: Direct3D e OpenGL realmente não são APIs 3D, são? Eles estão oferecendo aceleração de hardware, mas em 2D e 3D. Há uma pequena diferença lá.
jacmoe

Respostas:

20

Você definitivamente deve usar algo que use um renderizador 3D no back-end. Mas no seu código de nível superior, você nem deveria ver o eixo Z. Tudo isso deve ser abstraído nos níveis mais baixos. Se você está manipulando pixels diretamente, provavelmente está fazendo algo errado.

Para meus próprios jogos, criei um conjunto de classes para lidar com objetos 2D. Minha lógica de jogo estava lidando apenas com as coordenadas xey. Minhas aulas também lidavam com coisas como rotação, redimensionamento, modos de mesclagem etc., etc.

Obviamente, também existem bibliotecas 2D que você pode usar - o Cocos2D é popular no iPhone. A maioria dessas bibliotecas, se não todas, será criada com as APIs 3D de nível inferior, para que se beneficiem da aceleração disponível.

Dennis Munsie
fonte
Eu estaria interessado em saber como o xna lida com a 2d api nos bastidores
Iain
5
É tudo 3D no final. Spritebatch, o cavalo de batalha de renderização 2D, é um efeito de sombreador.
Drxzcl 9/08/10
+1 para dissociar a interface da implementação.
Steve S
@Iain Aqui está uma implementação do XNA no DirectX11, escrita pelos autores do XNA xnatoolkit.codeplex.com .
ClassicThunder
8

Há um motivo para não usar a API 3D.

Somente computadores em NA, noroeste da UE e Japão os suportam ...

Eu moro no Brasil, por exemplo, meu computador irmão é novo, possui um processador multi-core, vários GB de RAM e, no entanto, não roda jogos de OpenGL.

Por exemplo, eu só posso jogar o Dwarf Fortress (use o OpenGL para renderizar gráficos ASCII) no meu próprio computador, em qualquer outro computador que eu ache que seja lento.

E isso não é um problema apenas do Brasil, perguntei às pessoas ao redor, e é comum em vários lugares do mundo ... A população que realmente possui cartões compatíveis com OpenGL ou Direct3D é uma minoria ...

Só que essa minoria recebe mais atenção das empresas ...

Mas se você estiver segmentando apenas esses mercados "tradicionais" (NA, Noroeste da UE, JP), então vá em frente!

EDITAR para aqueles que recusam votos: Obviamente, você não concorda, portanto, você tem PROVA que NINGUÉM envia mais computadores com chips VIA ou SIS de baixa qualidade (ou mesmo outros fabricantes desconhecidos ou piores) com nenhum ou apenas suporte ao OpenGL 1.0?

Eu tenho DUAS máquinas como essa em minha casa, e elas são novas (ambas têm mais de um núcleo, ambas têm 2 GB de RAM, ambas têm frequência de clock acima de 2 GHz ...)

Minha universidade tem 200 máquinas assim, mesmo algumas fabricadas pela Dell.

É simples, as GPUs são caras (mesmo as de baixa qualidade da Intel) e, em mercados pobres, é um luxo, as pessoas que compram máquinas para rodar o MS Word e lêem e-mails não compram uma máquina com um chip gráfico decente quando eles podem comprar um que seja 50 dólares mais barato, especialmente quando 50 dólares é o que a maioria das pessoas tem para comprar comida por um mês inteiro.

POR FAVOR, não venha aqui dizendo que estou dizendo BS, se você nunca visitou um país do terceiro mundo, e também, não diga que as pessoas do país do terceiro mundo não jogam, eles fazem muito, Osmos A postagem do desenvolvedor sobre o lançamento da versão Linux deles, apontou que muito tráfego de entrada (na verdade, a maior parte) era da Rússia, claramente porque essas pessoas geralmente são ignoradas.

Aqui no Brasil, o jogo mais popular é o Counter-Strike, rodando no modo Software ... Algumas Lan-Houses possuem apenas 10% das máquinas com GPU, mesmo as mais grandes com 200 ou 300 estações ...

Eu não deveria ter postado sobre isso, sabia que isso atrairia votos negativos, tenho perda de pontos grátis por postar isso, toda vez que explico por que meu outro jogo usa o Allegro 4.4 em vez de 5.0, porque 5.0 não suporta Direct Draw ou modo de software Recebo muitas críticas de muitas pessoas dizendo que sou uma espécie de mentirosa ou que sou estúpida por dizer essa verdade sobre a disponibilidade real da aceleração do OpenGL.

EDIT 2: Para poder jogar e desenvolver jogos com o OpenGL, tive que implorar para que meus pais e outras pessoas me comprassem uma GeForce 8600 (que foi a placa mais barata que achei que ainda podia rodar o Mass Effect 1 e outros UT3 - eles me compraram um, mas agora tenho vários anos sem receber outros presentes de novo, nem mesmo presentes de aniversário, por causa do preço, e espero que este cartão funcione por mais 3 ou 4 anos ...

EDIT 3:
Um exemplo prático: a Eletronic Arts criou um novo cliente para o Ultima Online que usa aceleração 3D para seus gráficos 2D ... Resultado: Muitos jogadores reclamam de taxas de quadros ridiculamente baixas e a EA recua na decisão de impor o uso de o novo cliente (agora é permitido continuar usando o antigo)

EDIT 4 em 2015: Esta resposta será deixada aqui principalmente como artefato histórico, atualmente a quantidade de computadores com chips extremamente ruins é baixa, mesmo em países do terceiro mundo, eles ainda existem, especialmente em computadores voltados para escritórios, mas não são isso mais comum, acho que não vale mais a pena trabalhar com APIs no modo de software; as APIs baseadas em OpenGL são o caminho a percorrer agora.

speeder
fonte
3
Não existem chips por aí que não suportem 3D atualmente. Provavelmente, você só precisa atualizar os drivers, porque os fornecidos pelo Windows não são compatíveis com o OpenGL. A GPU porcaria mais comum por aí é o material Intel GMA, e mesmo com suporte básico a OpenGl.
Axel Gneiting
1
Repetindo novamente: os chips aqui são Piores do que as coisas do Intel GMA. E sim, alguns drivers modificados resolvem o problema, mas você não pode esperar que os usuários saibam disso.
speeder
Um exemplo prático: a Eletronic Arts criou um novo cliente para a Ultima Online, que usa aceleração 3D para seus gráficos 2D ... Resultado: Muitos jogadores reclamaram de taxas de quadros ridiculamente baixas e a EA recuou na decisão de impor o uso do novo cliente. (agora que é permitido permanecer utilizando o antigo)
de aceleras
1
O novo cliente é de 2008, o que minha história diz é: as pessoas em 2008 não gostaram de um cliente OpenGL e voltaram a usar o de 1997.
speeder
1
Só porque as pessoas não atualizam seus drivers não significa que seus computadores não suportam OpenGL e Direct3D. O OP deve apenas verificar a compatibilidade com OpenGL / Direct3D. Se não estiver lá, ele deve pedir ao usuário para atualizar seus drivers. Isso funcionará em 98,6% dos casos, provavelmente até no segundo e terceiro mundos. Sério, você pode conectar-se a um computador que pode comprar sem suporte ao OpenGL / Direct3D?
Avi
3

Não, não existe. Você obterá melhores efeitos e renderização mais rápida usando um renderizador em 3D. Por exemplo, aqui está um jogo 2D que eu criei há algumas semanas (em um fim de semana) - os efeitos orb se inclinam fortemente sobre os sombreadores 3D, embora, de muitas maneiras, sejam efeitos 2D. Da mesma forma, fiz uso extensivo da tecnologia de renderização disponível para este jogo - há três ou quatro efeitos diferentes de pixel shader, todos os quais me permitem desenvolver mais rápido e torná-lo mais bonito.

Abrace o 3d e ame-o, mas ame-o com um eixo a menos.

ZorbaTHut
fonte
2

APIs 3D geralmente são o caminho a percorrer. As GPUs de hoje são projetadas para renderizar gráficos 3D, para garantir um desempenho bastante sólido. E, como disse ZorbaTHut, seguir a rota 3D permite tirar proveito de coisas como pixel shaders.

Realmente não existem mais APIs 2D por aí. O DirectDraw foi descontinuado e a maioria das bibliotecas baseadas em 2D / vetor lá fora usa o OpenGL ou o Direct3D para executar sua renderização de qualquer maneira. Até os kits de ferramentas de interface do usuário modernos estão aproveitando as APIs 3D para fazer sua renderização e composição. Veja o WPF (a mais recente estrutura de interface do usuário da Microsoft), por exemplo: ele usa o Direct3D para renderização.

Mike Strobel
fonte
2

Ainda existe um número surpreendente de máquinas realmente antigas por aí com aceleração 3D ruim e inexistente e drivers que nunca foram atualizados, de modo que o uso do DirectDraw ainda será muito mais rápido que o OpenGL ou o D3D. Eu experimentei isso enquanto trabalhava em um jogo multiplayer 2D com cerca de 10 anos agora, quando tentei escrever um novo backend de renderização no OpenGL para suportar outras plataformas. Muitos jogadores relataram que o modo OpenGL não era jogável devido às baixas taxas de quadros. Eu também concordaria com o pôster brasileiro de que isso é mais comum fora dos EUA e da Europa, mas ainda é verdade nesses lugares.

Se você estiver segmentando telefones celulares ou XNA, use definitivamente o 3D. Mas se você quiser criar um jogo que roda em qualquer PC, em qualquer lugar, eu diria que fique com o DDraw.


fonte
1

A única coisa em que consigo pensar é que o uso de uma API 3D sobre uma 2D adiciona alguma complexidade básica. No OpenGL, pelo menos, você precisa carregar e gerenciar texturas e, quando desenhá-las, precisa acertar a geometria. Uma camada de invólucro resolve esses problemas.

Dito isto, o uso de um back-end de gráficos 3D parece ter mais vantagens do que desvantagens, portanto, se você me perguntar, vale a pena o esforço.

Tung Nguyen
fonte
1

Se o seu jogo é simples o suficiente e você deseja que ele funcione bem em máquinas de baixo custo, principalmente netbooks e laptops mais antigos (sem aceleração 3D ou muito pouco - gráficos integrados mais antigos da Intel, etc.), ainda vale a pena considerar Abordagem de buffer de quadros 2D

Se você está feliz por o jogo exigir pelo menos uma placa / chip ATi / NVidia low-end, a utilização de uma API 3D permitirá que você faça muitas coisas legais (mistura alfa, escala / rotação etc.) que seria complicado fazer bem / eficientemente em um renderizador de software puro.

Além disso, esteja ciente de que algumas coisas muito simples em '2D puro' se tornam mais interessantes quando o hardware 3D (e a filtragem bilinear / mistura alfa) está envolvido. Entenda o conceito de alfa pré-multiplicado. E pense também, por exemplo, em como você lidaria com as costuras entre os ladrilhos em um mapa de ladrilhos 2D, se quisesse uma vista com zoom / rotação.

Lembre-se também de que a taxa de preenchimento é limitada. E é surpreendentemente fácil alcançar esses limites em 2D. Você pode não ter muitos polígonos, mas se quiser muitas camadas de paralaxe combinadas com alfa, partículas ou pós-efeitos - poderá acabar preenchendo tantos pixels quanto um jogo 3D de ponta.

Mas geralmente, o hardware 3D é incrível, e a mistura aditiva é sua amiga :)

bluescrn
fonte