Cursos / Jogos Digitais / Introdução a Jogos Digitais / Aula
E então, já captaram o que é um motor de jogo?
Não se aperreiem! O final da última seção já nos deixou algumas pistas:
Bom, dizer que o motor de um jogo é um simples programa seria simplificar demais. Na verdade, podemos dizer que o motor representa um framework de desenvolvimento de jogos, já que ele possui várias funcionalidades previamente implementadas em sua estrutura e, assim, o desenvolvedor precisa apenas “completar” e alterar o código para criar o seu jogo dentro da estrutura apresentada. Os motores costumam apresentar várias funcionalidades mais gerais, como:
Não se preocupem, falaremos um pouquinho mais sobre essas funcionalidades na próxima aula. O importante para absorverem agora é que o motor já possui uma base de implementação pronta para você usar e estender com código próprio. Dependendo do motor, isso pode ser feito de forma mais rudimentar, através do uso de bibliotecas de código ou, de forma mais elaborada, com uma interface contendo programas para edição do código, edição de modelos 2D/3D, gerenciamento de recursos, edição de animação, etc.
Um detalhe importante é que o motor não substitui todas as ferramentas necessárias na produção de um jogo. Embora alguns até possuam uma capacidade de criar modelos 3D básicos e animá-los, dificilmente conseguirão substituir uma ferramenta específica para esse fim, como o Blender ou Maya (ferramentas de modelagem 3D). Algo que eles fazem é permitir que o desenvolvedor carregue recursos produzidos nessas ferramentas de forma intuitiva e com um bom suporte para diferentes formatos. Daí entramos no segundo tópico: facilitar o desenvolvimento.
O motor de jogos pode ser visto como uma camada intermediária, ou middleware, entre a codificação do jogo e o hardware no qual ele é desenvolvido ou executado. Fazendo uma analogia com a programação: o seu computador só entende 0 e 1, a famosa linguagem binária de máquina, correto? Agora imagine o trabalho se você tivesse que programar dessa forma! Faça um programa que leia dois números e apresente a soma:
Impossível, não é? Embora seja essa a maneira como o computador entende o código, é muito difícil para nós decorarmos como escrever cada instrução e função de 0 e 1. Imagina ler esses números e achar os erros depois! Com certeza, não existiria a programação de computadores como temos hoje. Por isso, foram criadas as linguagens de programação, elas são uma forma em alto nível para que possamos descrever programas em um formato mais próximo da nossa linguagem natural (no caso, inglês), e deixamos a cargo do compilador/interpretador da nossa máquina a árdua tarefa de transformar o nosso programa em código binário para a máquina executar.
Analisando o motor de jogo por essa ótica, o que temos é algo similar, como implementar todo o controle de processos, leitura de arquivos, gerência de memória, controle de entrada e saída, dentre outros aspectos da máquina. Isso seria uma grande dificuldade para nós, o que tornaria a tarefa de se criar um jogo uma tarefa digna dos desafios de Hércules! Então o motor dá uma de compilador: ele deixa a nosso cargo a implementação da lógica do jogo, e a maior parte do “trabalho pesado” de interação com o sistema ele faz de modo transparente para o usuário (ou seja, nem vemos!). E como são tarefas que existem em basicamente todo jogo, o motor permite que reutilizemos essas funcionalidades prontas, e isso nos traz duas grandes vantagens:
Esse reuso permite não apenas a aceleração do projeto atual, como também a execução de vários projetos utilizando o mesmo motor (claro, se a empresa tiver gente suficiente para isso). Por ter componentes próprios para tratar das questões gráficas, de som e de animação, os motores de jogos costumam ser usados também para outras aplicações, como a produção de animações. Inclusive, os motores tentam prover uma interface em que se consegue editar e construir boa parte do jogo sem necessariamente programar, com ferramentas visuais e intuitivas que permitem aos profissionais de outras áreas, como artes e design, interagirem mais facilmente com o motor.
O motor fica responsável por vários aspectos básicos de um jogo. Por exemplo, a inicialização/finalização do jogo ocorre por meio de procedimentos já implementados no motor. Isso é importante porque, ao iniciar o jogo, um conjunto de informações deve ser alocado e estruturado na memória, e quando a aplicação terminar, é necessário “limpar” essa informação para não deixar “lixo” na memória e prejudicar a performance da máquina. Essa gestão também é importante durante a execução do jogo: imagine que seu jogo ocupe toda a memória do seu computador, devido a uma má gestão feita pelo programador. Para compensar essa falta de memória, o sistema operacional começará a trabalhar com memória virtual, usando parte da memória do disco para armazenar dados dos programas em execução, como um novo nível de hierarquia de memória. O problema é que o acesso ao disco é muito mais lento do que o acesso a RAM, causando uma queda significativa na performance do jogo. Para evitar que isso aconteça, é essencial manter a memória da maneira mais eficiente possível, removendo elementos que não estão sendo mais usados e minimizando o desperdício ao executar a aplicação. Essa gerência manual é muito trabalhosa, e o motor cuida de boa parte dela!
O motor também é responsável pela execução ordenada do jogo. Normalmente, os jogos possuem várias fases ou partes, que são interligadas em um mapa, e o jogador pode navegar livremente por elas (ou não!). Ao construir o jogo, o desenvolvedor indica no motor a sequência ou ligações entre os espaços do jogo e, a partir dessa sequência determinada, o motor irá encadear a carga desses espaços do mundo do jogo na ordem correta. Além disso, o motor implementa o ciclo do jogo de modo que o desenvolvedor precisa apenas especificar os eventos que ocorrerão a cada iteração do ciclo.
Empresas maiores costumam desenvolver motores próprios ou customizar um motor existente com a adição de novas funcionalidades, através de plugins. O plugin é um programa que é adicionado ao motor para que a nova funcionalidade seja acessível dentro da estrutura utilizada no desenvolvimento do jogo. Dentre os principais motores disponíveis no mercado, temos:
Durante o curso, usaremos engines com o propósito geral. Esses motores possibilitam a criação de jogos tanto 2D como 3D, e possuem muitos recursos prontos, normalmente disponibilizados através de uma loja ou asset store. Dentre as opções existentes, o Unity e o Unreal 4 se destacam por disponibilizarem versões gratuitas para desenvolvimento.
Curioso para conhecer os componentes do motor em maiores detalhes? Então vamos correndo para a próxima aula! Até lá!
Versão 5.3 - Todos os Direitos reservados