# Motor de jogo

Motor de jogo, também conhecido pelo termo em inglês, game engine, ou simplesmente engine, é um programa de computador e/ou conjunto de bibliotecas, para simplificar e abstrair o desenvolvimento de jogos eletrônicos ou outras aplicações com gráficos em tempo real, para videogames e/ou computadores rodando sistemas operacionais. As funcionalidades tipicamente fornecidas por um motor de jogo incluem: um motor gráfico para renderizar gráficos 2D e/ou 3D; um motor de física para simular a física ou simplesmente para fazer detecção de colisão; suporte a animação; sons; inteligência artificial; networking; gerência de memória; gerência de arquivos; gerência de linha de execução; suporte a grafos de cena e entidades; e suporte a uma linguagem de script.
O termo “game engine” originou-se no meio da década de 1990, especialmente em conexão com jogos 3D, como tiro em primeira pessoa. O primeiro motor 3D a ser usado para criar jogos de computador foi o Freescape Engine, desenvolvido pela Incentive Software em 1986, usado para criar jogos de tiro em primeira pessoa a partir de 1987. Preços de motores de jogos variam muito, desde a gratuidade e valores baixos, como US$ 150,00, até valores exorbitantes como US$ 31 200,00 ou mais caros. O processo de desenvolvimento de jogos é frequentemente agilizado, quando um mesmo motor de jogo é usado para criar diferentes jogos.

## Definição

A maioria dos motores de jogo são distribuídos em forma de API, porém, alguns motores são distribuídos em conjunto de ferramentas, que agilizam e simplificam ainda mais o desenvolvimento do jogo, como por exemplo: IDEs, scripts pré-programados, e programas que “empacotam” e deixam pronto o jogo para distribuição. Esses motores “completos” são chamados de Middleware, pelo fato de conectar diversos softwares em um único software. Pelo fato de serem distribuídos com outras ferramentas, eles suprem a necessidade da compra de outras ferramentas, reduzindo os custos — todos fatores críticos na altamente competitiva indústria de jogos eletrônicos. Como exemplo, pode-se citar: Torque Game Engine, Unity, Blender, CryEngine e Unreal Engine.
Um motor de jogo pode ser dividido em duas principais categorias: motor gráfico e motor de física. Motores gráficos lidam com os gráficos, sendo responsáveis de processar dados abstraídos de alto nível e gerar dados de baixo nível entendíveis pelo hardware. Como exemplo, pode-se citar: OGRE, Crystal Space e OpenSceneGraph. Motores de física lidam com a física, sendo responsáveis por simular ações reais, através de variáveis como gravidade, massa, atrito, força e flexibilidade. Como exemplo, pode-se citar: Havok, Bullet e ODE.
Apesar da especificidade do nome, motores de jogo são também usados para criar outros tipos de aplicações interativas com gráficos em tempo real, tais como demonstrações, visualizações arquiteturais, simulações de treinamento (como de pilotagem de aeronaves e manuseio de armas), ferramentas de modelagem, simulações físicas para a criação de animações e cenas de filmes realistas.

### Abstração de hardware

Motores de jogo fornecem abstração de hardware, permitindo um programador desenvolver jogos sem a necessidade de conhecer a arquitetura da plataforma-alvo, que pode ser um videogame ou um sistema operacional. Por esse motivo, muitos motores são desenvolvidos a partir de uma API existentes, como OpenGL, DirectX, OpenAL e SDL, ou até mesmo a partir de outro motor, que pode facilitar o seu desenvolvimento. A abstração de hardware também é essencial para o desenvolvimento de motores de jogo multiplataforma.
Antes dos gráficos 3D acelerados por hardware, renderizadores por software eram usados. Renderização por software é ainda usada em algumas ferramentas de modelagem e renderizadores de imagens, onde a qualidade gráfica é priorizada, ou quando o hardware não suporta determinada tecnologia, tal como suporte a shaders.

## História

Antes dos motores de jogo, os jogos eram tipicamente escritos como entidades singulares (não havia separação de áreas, como gráfica e física): um jogo para o Atari 2600, por exemplo, tinha que ser planejado do início, mantendo o código o mais simples possível, para fazer uso otimizado do hardware, por causa de suas limitações. Mesmo em plataformas mais favoráveis, muito pouco podia ser reutilizado entre os jogos. O rápido avanço do hardware fez com que a maioria dos códigos tivessem que de qualquer maneira, serem jogados fora posteriormente, como as gerações posteriores de jogos devessem usar designs completamente diferentes que tomassem vantagem de recursos extras e tecnologias mais novas.
O termo “game engine” originou-se no meio da década de 1990, especialmente em conexão com jogos 3D, como tiro em primeira pessoa. Igual como, foi a popularidade dos jogos Doom e Quake, ao invés de construir o jogo do zero, outros desenvolvedores licenciaram os núcleos dos jogos, usando-os como base para seus próprios motores de jogo. Com o amadurecimento, os motores de jogo deixaram de se restringirem ao desenvolvimento de jogos. Eles são usados em outras áreas, como treinamento, uso médico e simulações militares. Apesar do termo ser primeiramente usado nos anos 90, há alguns sistemas nos anos 80 que também são considerados motores de jogos, tais como Sierra's AGI e SCI Systems, LucasArts' SCUMM e Incentive Software's Freescape Engine. Entretanto, diferente da maioria dos motores de jogo modernos, esses motores de jogo nunca foram usados em quaisquer produtos de terceiros, com exceção do SCUMM System que foi licenciado e usado para Humongous Entertainment. O primeiro motor 3D a ser usado para criar jogos de computador foi o Freescape Engine, desenvolvido pela Incentive Software em 1986, usado para criar jogos de tiro em primeira pessoa a partir de 1987.
Apesar de já serem criados jogos muito antes da criação de APIs como DirectX e OpenGL, a criação dos mesmos impulsionou a evolução das tecnologias usadas nos jogos e ajudou a desenvolver esse mercado. A primeira versão do DirectX foi lançada em 30 de setembro de 1995 como a Windows Games SDK. Ele foi o componente da Win32 API que substituiu a DCI e WinG do Windows 3.1. Depois de criado, o DirectX permitiu todas as versões do Microsoft Windows, iniciando com o Windows 95, a incorporar multimídia de alto desempenho. Eisler escreveu sobre a loucura para construir o DirectX 1 até o 5 em seu blog. Apesar do OpenGL ter sido criado primeiro (janeiro de 1992), o DirectX teve (e ainda tem) mais aceitação na área de desenvolvimento de jogos.
Por muito tempo, as companhias fizeram seus próprios motores de jogo. Com o passar dos anos, o custo de se fazer motores de jogo cresceu muito, e por esse motivo, várias companhias começaram a se especializar em construir motores de jogo, ou componentes de motores, para vender para outras companhias. É muito caro (e demorado) para uma companhia ter que produzir seu próprio motor de jogo para depois construir o jogo.
Motores de jogo modernos são umas das aplicações mais complexas já escritas. A contínua evolução dos motores de jogo tem criado uma forte separação entre renderização, scripting, arte, e design de níveis. Atualmente, por exemplo, é comum para um típico time de desenvolvimento de um jogo ter muitos artistas quanto programadores. Como a maioria dos jogos 3D estão, cada vez mais, se limitando ao poder da GPU e PPU, as perdas de desempenho das linguagens de programação de alto nível, como C#, Java e Python, deixam de ser válidas, enquanto os ganhos de produtividade oferecidos por essas linguagens trabalham em benefício dos desenvolvedores de motores de jogo.
Preços de motores de jogos variam muito, desde a gratuidade e valores baixos, como US$ 150,00, até valores exorbitantes como US$ 31 200,00 ou mais caros. A indústria de jogos eletrônicos tem constantemente se expandido. O lucro dessa indústria, em 2007, foi de US$ 9,5 bilhões, ultrapassando a indústria cinematográfica. A receita bruta em 2007 alcançou US$ 18,8 bilhões, e dez anos depois, em 2017, alcançou US$ 36 bilhões.

## Motores de tiro em primeira pessoa

Um bom e conhecido subconjunto de motores de jogo são os motores de tiro em primeira pessoa 3D. Enquanto jogos de estratégia em tempo real e simuladores de voo apostam na qualidade gráfica, jogos deste gênero apostam na ação. O motor mais conhecido deste gênero é o Doom. Motores de tiro em primeira pessoa são importantes pois marcam o início da criação e uso de motores de jogo na história. O primeiro motor 3D a ser usado para criar jogos de computador foi o Freescape Engine, desenvolvido pela Incentive Software em 1986, usado para criar jogos de tiro em primeira pessoa a partir de 1987.
As melhorias em GPUs como Shader Model 3 e Shader Model 4, possibilitou melhorias em efeitos gráficos. A partir de 2009, duas evoluções dos principais motores existentes foram anunciadas: id Tech 5 (que foi usado pela primeira vez com Rage, e conta com uma nova tecnologia chamada Virtual Texturing), e o CryEngine 3, que foi usado na criação de Crysis 2.
Poucas empresas têm discutido os planos para o futuro de seus motores, porém, o id Tech 6, eventual sucessor do id Tech 5, é uma exceção. Informações preliminares sobre esse motor que ainda está em fases iniciais de desenvolvimento tendem a mostrar que a id Software está olhando para uma direção onde ray tracing e gráficos raster clássicos se misturam. No entanto, de acordo com John Carmack, o hardware capaz de aproveitar os recursos do id 6 Tech ainda não existe.
Ele irá funcionar através da renderização da geometria representada por voxels (em vez de triângulos) armazenados em uma octree. John Carmack afirma que este formato também será uma maneira mais eficiente para armazenar os dados em 2D, bem como os dados de geometria 3D, por não ter problemas com armazenamento. Ele irá virtualizar a geometria, como as texturas são virtualizados.