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.

Comentários
Postar um comentário