Escolha da engine – Uma decisão difícil

Escrito por Rodrigo Flausino em 20/12/2008

-->



Esta semana andei repensando um pouco as minhas prioridades e vi que eu devo voltar a focar em programação. Como gosto mais de 3D e tenho conhecimentos intermediários na plataforma Java, é natural eu ir para esta linguagem, mesmo ela não sendo recomendada para aplicações desktop 3D. Aí eu comecei a analisar as engines que existem por aí, o que me faz levantar algumas questões básicas.

A primeira delas é a própria linguagem. Quando uma equipe opta por uma linguagem, ela opta pela linguagem que a maioria sabe. Ou mesmo a equipe opta pelas ferramentas que a empresa licenciou, o que pode forçar a equipe a ter um treinamento ou mesmo procurar no mercado de trabalho pessoal qualificado naquela linguagem. Aqui no Brasil, pelo que ando vendo, a procura em gamedev é maior em Flash, JavaME (celulares) e Blitz 3D. Apesar de C++ ser a linguagem que muita gente recomenda e bla bla bla, dificilmente eu vi oportunidades nesta linguagem (aliás, eu mal vejo oportunidades sérias de emprego na área de programação de jogos. Mas isso é assunto para outro artigo). É claro que há exceções, como empresas como a Ubisoft, que precisam de gente gabaritada nesta linguagem, por ela ser usada em larga escala no exterior e pelas melhores ferramentas de programação serem baseadas nesta linguagem.

O maior problema da escolha da linguagem são suas prováveis limitações, e isso deve ser levantado pela equipe antes de iniciar o desenvolvimento do projeto. O próprio projeto deve ser levado em conta, já que dependendo de fatores como o público-alvo e direção de arte, pode ser mais interessante ir para uma certa abordagem específica. Pretende fazer um jogo 3D? Procure uma engine gráfica. Um game de puzzle ou plataforma: Flash pode ser uma ótima saída além de ser bem rentável, caso você coloque num site e ganhe dinheiro com publicidade. Se for só pra estudo, APIs como Allegro podem resolver o problema.

Então a linguagem foi escolhida, mas falta as ferramentas adicionais. No caso, as engines gráficas e/ou APIs disponíveis por aí. Então entra novamente o estilo gráfico. O Flash, por exemplo, tem uma linguagem embutida e é relativamente fácil fazer a parte gráfica. O problema maior é o custo, já que a equipe teria de licenciar a ferramenta. Mas o Flash sozinho não é interessante caso o projeto seja em 3D (a menos que você faça igual a Aquiris e criar games usando a engine Unity e usar o Flash), o que é necessário usar uma engine robusta. C++ nesse caso é a melhor pedida, já que as melhores engines disponíveis são para esta linguagem. Se for 2D, também é C++, com Allegro e SDL. Se for celular, Java, por ser a plataforma mais comum de se ter na maioria dos aparelhos instalados, além do próprio Java ter uma API própria pra desenvolvimento mobile: Java Micro Edition.

Com esse tanto de possibilidades, muito desenvolvedor iniciante fica perdido. Escolher uma linguagem para trabalhar é difícil, já que para o futuro programador ficar bom nela demanda bastante tempo. Chuto pelo menos de 6 meses a 1 ano pra ele conseguir fazer coisas básicas e intemediárias e pelo menos 3 anos para ele ser um expert, isso se ele estudar com afinco durante todo esse tempo. Ainda assim ele tem de ficar atento com todas as novidades da linguagem e da área, para ele não ficar para trás e desatualizado.

Mesmo ele escolhendo a engine, ele fica limitado a ela durante todo o projeto e com isso escolher uma, como disse acima, é bem complicado. Primeiro que é necessário ter o projeto do jogo em mãos e nele tem de ter tudo relacionado ao estilo gráfico. O jogo vai ter partes chuvosas? Vai ter fumaça? A equipe tem de analisar se aquela engine tem como facilitar a geração gráfica desses recursos, para facilitar a vida dos programadores e não obrigar os caras a programar coisas difíceis que podem demandar bastante tempo e atrasar o projeto. Além disso, se a escolha for equivocada, a equipe terá de continuar até o fim ou recomeçar, o que pode inviabilizar o projeto. Se ela estiver no começo do desenvolvimento ou mesmo criando um protótipo, ela pode se dar ao luxo de alterar a ferramenta e re-testar (mas envolve custos). Se o desenvolvimento está em processo intermediário, aí os programadores terão de se virar pra fazer coisas que em outra engine teria o recurso de forma automatizada.

Outro fator importante na escolha da engine é na documentação e no suporte. OK, para nós desenvolvedores indie a palavra suporte pode parecer uma piada, mas se uma equipe tem condições de adquirir uma engine paga, é interessante analisar se os mantenedores tem como ajudar a equipe com dúvidas diversas. No caso da documentação, se a engine tem algum manual e/ou tutoriais, isso facilita pra equipe poder estudar a engine e a sua estrutura. Se a engine tem fóruns de discussão, os programadores podem pedir ajuda e pessoas mais experientes podem ajudar a equipe em executar funções mais complexas do jogo!

O que quero com este texto é fazer os jogadores pensarem nos ítens acima e analisarem as melhores alternativas. Pode ser bem demorado analisar diversas engines até encontrar a melhor solução, mas no final das contas a equipe pode ter um jogo decente em mãos e terá conhecimentos sólidos naquela engine, o que pode ser bom em futuros projetos, poupando tempo e recursos.


Possíveis posts relacionados:


  1. A difícil tarefa de planejar um puzzle casual
  2. Conheça o Unity Engine
  3. Artigo com estudo de viabilidade pra abrir uma empresa de gamedev
  4. Unreal Engine 3 em versão gratuita

Artigos, Programação

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

  1. December 21st, 2008 at 03:59 | #1

    Realmente, Allegro e SDL dão muito bem conta do recado para iniciantes em Desenvolvimento de jogos 2D. Eu mesmo sou fascinado pela Allegro.

    Em 3D, a Irrlicht e a Ogre3D são perfeitas, não só para iniciantes, mas é possível criar jogos profissionais e comerciais com elas.

    Claro, isso tudo em C/C++. O JavaME é a, indiscutivelmente, perfeito para Mobile. O mercado de jogos para celulares no Brasil tá crescendo muito, e além de tudo é relativamente fácil fazer jogos nessa plataforma.

    Tem também o XNA, que você não citou aí, mas também é uma boa pedida para desenvolvedores Indie e para empresas, uma vez que já é possível distribuir jogos comerciais (vender) para Xbox360 no Xbox Live.

    Ótimo artigo, Flausino. Valeu! ^^

  2. Marco Biscaro
    December 28th, 2008 at 06:46 | #2

    Por que, no início do tópico, afirma que Java não é recomendada para aplicações desktop em 3D?
    Isso é o que muita gente afirma, mas atualmente não é bem assim. Com a melhoria da JVM e maior integração direta com o hardware (fullscreen), Java não costuma ter problemas com jogos e 3D. E como já se sabe, Java tem tropocentenas de API's, oficiais e de terceiros, de altíssima qualidade, com suporte e documentação totalmente acessíveis (Java é fantástico, mas isso não vem ao caso).

    Seu post está realmente muito bom e de fato, é bem difícil encontrar uma engine que seja acessível (preferencialmente livre), e ao mesmo tempo robusta e confiável, potente e não muito difícil de usar.

  1. December 29th, 2008 at 00:56 | #1