Engines

Um motor de um carro é responsável por fazê-lo andar. Ao dar a ignição do veículo, o motorista coloca o motor em funcionamento e começa a mover-se com ele, sem precisar saber como funciona todo o processo mecânico. A transferência do movimento dos eixos para as rodas, a sincronização das explosões dos pistões, a injeção de combustível na câmara de combustão, tudo fica a cargo do motor. 

Um engine para jogos basicamente segue o mesmo princípio de funcionamento. Dentro do conceito de engenharia de software trata-se da parte do projeto que executa certas funcionalidades para um programa. 

Dentro da área de jogos, um engine se encarregará por entender-se com o hardware gráfico, irá controlar os modelos para serem renderizados, tratará das entradas de dados do jogador, tratará de todo o processamento de baixo nível e outras coisas que o desenvolvedor de jogos normalmente não deseja fazer ou não tem tempo para se preocupar. 

Existem inúmeras definições para um engine. Entretanto, estas definições convergem em algumas características:

  • Permitir que o desenvolvedor possa criar diversos jogos diferentes, usando um mesmo engine. É comum, entretanto, que os engines sejam catalogados de acordo com os tipos de jogos para os quais eles foram concebidos [EBE 00];
  • Poder reaproveitar com facilidade o código desenvolvido em projetos anteriores;
  • Abstrair a manipulação de APIs (embora, em muitos casos, o desenvolvedor irá usar as próprias APIs dentro do ambiente do engine, para implementar funcionalidades específicas);
  • Possibilitar uma fácil integração entre código e modelagem 3D. Para esta finalidade é comum que os engines apresentem editores de cenas.

Desenvolver um engine é uma área complexa, repleta de desafios. Entretanto, o objetivo deste documento não é ensinar a implementar um engine, mas sim entendê-los e saber utilizá-los.


Normalmente, um engine é composto por diversas ferramentas, cada uma responsável por alguma etapa do processo de criação de um jogo. Os componentes mais comuns [ZER 04] de se encontrar em engines são os seguintes:  

Engine Core: Consiste no “coração do engine”. Este será um programa que executará a aplicação do jogo, manipulará a fase e os objetos, renderizará as cenas, etc. Fazendo-se uma grossa analogia, pode-se dizer que o engine core é o sistema operacional do jogo;

Engine SDK: É o código fonte do engine core. Através dele pode-se alterar o funcionamento do engine. Normalmente este componente é o mais protegido e para conseguí-lo, no caso de engines comerciais, será necessário comprar o pacote que a empresa oferece. É possível criar jogos sem o SDK de um engine, entretanto, os tipos de aplicações possíveis de serem desenvolvidos serão muito mais restritos.

Level Editors: Através deste componente será possível unificar modelagens feitas em diversos programas, associá-los à programação, inserir códigos em scripts, etc. Em muitos casos, dentro destes editores é possível também criar modelos 3D. Veja Figura 58.

Conversores/Exportadores: Os resources serão normalmente feitos em diversos softwares comerciais, como se apresentou no capítulo 2. Mais ainda: numa equipe de desenvolvimento grande cada artista poderá criar os elementos no programa de sua preferência. Assim sendo, os engines deverão fornecer instrumentos para importar estes modelos para o formato específico do engine. Estes conversores poderão ser plug-ins instalados nos programas de modelagem 3D ou podem estar incluídos no level editor;

Builders: Como será discutido algumas operações pré-processamentos sobre os objetos (tais como o BSP, lightmaps, portais, PVS, etc.) precisam feitas. Desta maneira, um engine fornecerá as ferramentas para realizar estes préprocessamentos. É comum que estejam dentro do level editor;

Linguagens Script: Grande parte do desenvolvimento da lógica do jogo e da Inteligência Artificial dos elementos dinâmicos será implementada sobre scripts e não diretamente sobre o engine core. Assim, cada engine possuirá sua linguagem de programação script, sendo comum usar linguagens comuns, tais como JavaScript, Python e LUA.

Pode-se afirmar que um engine na realidade é composto por diversos “subengines”, sendo cada um responsável por tratar um tipo de problema envolvido em jogos. Os principais componentes são de renderização, de física, de som e de Inteligência Artificial. Nas próximas subseções cada um desses componentes serão detalhados.

ATIVIDADE DE FIXAÇÃO

Comentários

Postagens mais visitadas deste blog

Desenvolver um Jogo Plataforma

Uso de Modelos 3D

Game Design Document