Arquitetura de Motores de Jogos
• Introdução
• Motores de Jogos
• Características de Gêneros de Jogos
• Mercado de Motores de Jogos
• Arquitetura de Motores de Jogos
• Ferramentas e Linha de Produção de
Recursos
Motivação
• Um jogo leva de 2 a 5 anos para ser desenvolvido
• Uma grande parte do ciclo de desenvolvimento de jogos envolve a “reinvenção da roda”: – Gerenciador de sprites
– Manipulador de som
– Controle de interface de entrada
– Renderização
– etc.
• Termina-se levando mais tempo nos detalhes técnicos do que no próprio jogo
Motivação
• Se um jogo for bem estruturado, certas partes podem ser genéricas o suficiente para serem (re)aplicadas em vários outros jogos
• E ao mesmo tempo podem até nem serem implementadas, uma vez que já existem muitos componentes de altíssima qualidade disponíveis no mercado – Enorme ganho de tempo !!!! ($$$$$$$)
Como Melhorar Essa Situação?
• Organizar o projeto baseado em certos critérios:
– Funcionalidade
– Dependência
– Relação com o mundo real
• Como é feita a divisão?
– Quais são as diferentes partes?
• Como fazer a comunicação entre estas diversas partes?
MOTORES DE JOGOS
DESENVOLVIMENTO DE JOGOS
Motores de Jogos
• O termo “game engine” surgiu em meados da
década de 90 em referência ao jogo de tiro em
primeira pessoa (first person shooter – FPS) Doom
da id Software
• A arquitetura de Doom possuía uma separação
razoavelmente bem definida entre seus
componentes de software centrais (como o sistema
de renderização de gráficos tridimensionais, o
sistema de detecção de colisão, ou o sistema de
áudio) e aspectos de arte, mundos e regras do jogo
Motores de Jogos
• O valor dessa separação se tornou evidente assim
que desenvolvedores começaram a licenciar jogos
e recriá-los dentro de novos produtos através do
desenvolvimento de nova arte, layouts de mapas,
armas, personagens, veículos e regras, com
mudanças mínimas no programa “motor”
• Isto marcou o surgimento da “comunidade mod” –
um grupo de jogadores individuais e pequenos
estúdios independentes que construíam novos
jogos a partir da modificação de jogos existentes,
usando ferramentas livres fornecidas pelos
desenvolvedores originais
Motores de Jogos
• No final da década de 90, alguns jogos como
Quake III Arena e Unreal foram projetados com
reuso e “modding” em mente
• Motores se tornaram altamente customizáveis via
linguagens de script como Quake C da id, e
passaram a se tornar uma segunda receita viável
para desenvolvedores
• Hoje desenvolvedores de jogos podem licenciar um
motor de jogos e reusar partes significantes de
seus componentes chaves de software para a
criação de jogos
Motores de Jogos
• Uma arquitetura dirigida a dados é o que
diferencia um motor de jogos de uma parte
de software de um jogo mas que não é um
motor
• Quando um jogo possui a lógica ou regras
altamente codificadas, ou emprega técnicas
de codificação especiais para renderizar
tipos específicos de objetos do jogo, se torna
difícil ou impossível reusar o software para
criação de um jogo diferente
Motores de Jogos
• O termo “motor de jogo” deve ser reservado
a software extensível e que pode ser usado
como base para muitos jogos diferentes sem
grandes modificações
Escala de Reusabilidade em Motores
de Jogos
Pacman Hydro Thunder
Engine
Quake III
Engine
Unreal
Engine
3 Provavelmente
Impossível
Não pode ser utilizado para
construir mais que um jogo
Pode ser customizado para
fazer muitos jogos similares
Pode ser “adaptado” para
construir qualquer jogo
de um gênero específico
Pode ser usado para construir
qualquer jogo imaginável
Motores de Jogos
• A maioria dos motores de jogos são
cuidadosamente desenvolvidos e ajustados para
rodar um jogo em particular em uma plataforma de
hardware específica
• E mesmo os motores multiplataformas de propósito
geral, realmente só podem ser utilizados para
desenvolver jogos de um determinado tipo, como
FPS ou jogos de corrida
• Pode-se seguramente afirmar que quanto mais de
propósito geral é um motor de jogo ou componente
de middleware, menos adaptado ele é para rodar
um jogo específico em uma plataforma específica
CARACTERÍSTICAS DE
GÊNEROS DE JOGOS
DESENVOLVIMENTO DE JOGOS
Motores de Jogos X Gêneros
• Motores de jogos são de certa forma
tipicamente específicos por gêneros
– Um motor projetado para um jogo de luta entre
duas pessoas em um ringue será muito diferente
de um motor para um “jogo eletrônico online
multijogador em massa” (massively multiplayer
online game – MMOG) ou de um motor para um
jogo FPS ou para um jogo de estratégia em
tempo real (real-time strategy – RTS)
Motores de Jogos X Gêneros
• No entanto, diferentes gêneros apresentam
muita coisa em comum (renderização 3D,
música, efeitos sonoros, entrada através de
teclado, joystick, mouse, etc.
– O motor Unreal, por exemplo, apesar de ser
projetado para jogos FPS, tem sido utilizado
para construir vários jogos de outros gêneros
Unreal Engine
Unreal – FPS
Unreal Engine
Gears of War – Third Person Shooter
by Epic Games
Unreal Engine
Grimm – Jogo de Aventura
By Spicy Horse
Unreal Engine
Speed Star – Jogo de Corridas Futurista
by Acro Games
First-Person Shooters (FPS)
• Tipificado por jogos como Doom, Quake, Unreal
Tournament, Half-Life, Counter-Strike e Call of Duty
• Fornece ao jogador a ilusão de estar imerso em um
mundo detalhado hiperrealista
Call of Duty
by Activision
Tecnologias para Jogos FPS
• Renderização 3D de mundos virtuais eficiente
• Controle de câmera/mecânica de mira eficientes
• Animações de alta fidelidade de jogadores virtuais, braços e
armas
• Uma grande quantidade de armamento manual
• Um modelo flexível de locomoção e colisão de
personagens, que dá a sensação de “flutuação”
• Animações de alta fidelidade e inteligência artificial para
non-player characters (NPCs) – personagens inimigos e
aliados
• Capacidade multi-jogadores de baixa escala (tipicamente
até 64 jogadores simultâneos), e
• O modo onipresente de gameplay “death match”
Jogos de Plataforma e Outros em
Terceira Pessoa
• Jogos de ação onde pular de plataforma para
plataforma é a mecânica principal do
gameplay
• Jogos típicos da era 2D incluem Space
Panic, Donkey Kong, Pitfall! e Super Mario
Brothers
• A era 3D inclui Super Mario 64, Crash
Badicoot, Rayman 2, Sonic the Hedgehog, a
série Jak and Daxter, a série Ratchet &
Clank e Super Mario Galaxy
Jogos de Plataforma e Outros em
Terceira Pessoa
• Em termos de requisitos tecnológicos, jogos
de plataforma podem usualmente ser
agrupados com jogos de tiro em terceira
pessoa e jogos de ação/aventura em terceira
pessoa, como Ghost Recon, Gears of War e
Uncharted: Drake´s Fortune
Jogos de Plataforma e Outros em
Terceira Pessoa
Donkey Kong
Jogos de Plataforma e Outros em
Terceira Pessoa
Donkey Kong
Crach Bandicoot
Jogos de Plataforma e Outros em
Terceira Pessoa
Donkey Kong
Crach Bandicoot
Ghost Recon
Tecnologias
• Plataformas móveis, escadas, cordas, treliças e
outros modos de locomoção interessantes
• Elementos do ambiente tipo “puzzle”
• Uma câmera que segue o personagem e cuja
rotação é controlada pelo jogador humano
• Um sistema de controle de colisão de câmera
complexo para garantir que o ponto de visão nunca
“corte” apesar da geometria do fundo ou de objetos
dinâmicos em primeiro plano
Jogos de Luta
• São tipicamente jogos de dois jogadores
envolvendo personagens humanoides se
esmurrando em um ringue de algum tipo
• O gênero é tipificado por jogos como Street Fighter,
Soul Calibur e Tekken
Tecnologias para Jogos de Luta
• Um conjunto rico de animações de lutas
• Detecção de colisão apurado
• Um sistema de entrada capaz de detectar
combinações complexas de botões e joystick
• Uma coleção vasta de planos de fundo
diversos, mas relativamente estáticos
Tecnologias para Jogos de Luta
• O “estado-da-arte” em jogos de luta como o
Fight Night Round 3 da EA, elevaram o nível
da tecnologia com características como:
– Personagens gráficos de alta resolução,
incluindo efeitos de pele realísticos
– Animações de personagens de alta fidelidade
– Física para tecidos e simulação dos cabelos dos
personagens
Fight Night Round 3
Jogos de Corrida
• Engloba os jogos onde o principal objetivo é dirigir
um carro ou outro veículo em algum tipo de pista
• O gênero possui muitas subcategorias:
– Jogos de corrida com foco em simulação objetivam
fornecer uma experiência de pilotagem o mais realística
possível (ex. Gran Turismo)
– Corridas do tipo arcade colocam a diversão sobre o
realismo (ex. San Francisco Rush, Cruisin´ USA, Hydro
Thunder)
– Jogos que exploram a subcultura de corridas de rua, com
veículo de consumo (ex. Need for Speed, Juiced)
– Corridas de kart com personagens de cartoons (ex.
Mario Kart, Jak X, Freaky Flyers)
Tecnologias para Jogos de Corrida
• Vários “truques” são usados quando renderizando
elementos distantes de planos de fundo, como
empregar cartões bidimensionais para árvores,
penhascos e montanhas
• A pista é sempre dividida em regiões
bidimensionais relativamente simples chamadas
“setores”, usadas para otimizar a renderização de
determinação da visibilidade, para auxiliar na
inteligência artificial e “path finding” para ou
veículos não controlados por humanos, e para
resolver muitos outros problemas técnicos
Tecnologias para Jogos de Corrida
• A câmera tipicamente segue o veículo por traz para
uma perspectiva em terceira pessoa, ou algumas
vezes situada dentro do cockpit para o estilo em
primeira pessoa
• Quando a pista envolve túneis e outros espaços
“apertados”, uma grande quantidade de esforço é
colocado para garantir que a câmera não colida
com a geometria do plano de fundo
Jogos de Corrida
Gran Turismo
Jogos de Corrida
Gran Turismo
Cruisin’ USA
Jogos de Corrida
Gran Turismo
Cruisin’ USA
Need for Speed
Jogos de Corrida
Gran Turismo
Cruisin’ USA
Need for Speed
Mario Kart
Estratégia em Tempo Real
• Gênero definido por Dune II: The Building of a
Dinarty (1992)
• Inclui jogos como Warcraft, Command & Conquer,
Age of Empires e Starcraft
• O jogador distribui unidade de batalha de seu
arsenal estrategicamente através de um largo
campo de jogo na tentativa de sobrepor seu
oponente
• O mundo do jogo é tipicamente mostrado em um
ângulo de visão oblíquo topo-base (2D ½)
Tecnologias
• Cada unidade é relativamente de baixa resolução, de
maneira que o jogo possa dar suporte a um grande número
de elementos ao mesmo tempo
• A altitude do terreno é normalmente a tela (canvas) sobre a
qual o jogo é projetado e jogado
• É sempre permitido ao jogador construir novas estruturas
no terreno em adição a distribuição de suas forças
• A interação do usuário é tipicamente via toque-único e
seleção de unidades baseada em área, mais menus ou
barras de ferramentas contendo comandos, equipamento,
tipos de unidade, tipos de construções, etc.
Estratégia em Tempo Real
Dune II
Estratégia em Tempo Real
Dune II
Warcraft
Estratégia em Tempo Real
Dune II
Warcraft
Age of Empires
Estratégia em Tempo Real
Dune II
Warcraft
Age of Empires
Command & Conquer 3
Massively Multiplayer Online Games
(MMOG)
• Este gênero é tipificado por jogos como Nevermind
Nights, EverQuest, Word of Warcraft e Star Wars
Galaxies, para mostrar alguns
• É definido por qualquer jogo que dê suporte a um
grande número de jogadores simultâneos (de
milhares a centenas de milhares), normalmente
todos jogando em um mundo virtual persistente
muito grande
– Persistente porque estados internos duram períodos de
tempo muito longos, além de uma sessão de um único
jogador
Massively Multiplayer Online Games
(MMOG)
• Subcategorias desses jogos incluem: – MMO role-playing games (MMORPG)
– MMO real-time strategy games (MMORTS)
– MMO first-person shooters (MMOFPS)
• No coração de todo MMOG está uma bateria
poderosa de servidores
• Estes servidores mantém o estado do mundo do
jogo, gerenciam usuários logando e saindo do jogo,
fornecem serviços de chat entre usuários e voz
sobre ip (VoIP)
Massively Multiplayer Online Games
(MMOG)
• A maioria deles requer que os usuário paguem por
uma assinatura regular
• A fidelidade de seus gráficos é geralmente mais
baixa que versões não MMOG devido à grande
área do mundo e ao número de jogadores
simultâneos
Massively Multiplayer Online Games
(MMOG)
World of Warcraft
Massively Multiplayer Online Games
(MMOG)
World of Warcraft
Star Wars Galaxies
Outros Gêneros
• Existem claro, muitos outros gêneros que não
serão cobertos em profundidade aqui:
– Esportes (futebol, basebol, futebol americano, golf,
basquete, etc.)
– Role-playing games (RPG)
– “God games”, como Populus e Black & White
– Jogos de simulação social/ambientes, como Simcity e
The Sims
– Jogos puzzle, como Tetris
– Conversão de jogos de tabuleiro, como xadrez, jogos de
carta, go, etc.
– Jogos baseados na Web, como os oferecidos pelo site
da EA Pogo
MERCADO DE MOTORES DE
JOGOS
DESENVOLVIMENTO DE JOGOS
A Família de Motores Quake
• O primeiro jogo de tiro 3D em primeira pessoa
geralmente aceito é o Castle of Wofenstein 3D
(1992)
• Escrito pela Id Software Texas para a plataforma
PC, levou a indústria para uma nova e excitante
direção
• Id Software também criou Doom, Quake, Quake II
e Quake III, todos com uma arquitetura muito
similar (família de motores Quake)
• A tecnologia Quake foi usada para criar muitos
outros jogos e mesmo outros motores
A Família de Motores Quake
• Por exemplo, a estirpe de Medal of Honor para a
plataforma PC, segue algo parecido com:
– Quake III (Id)
– Sin (Ritual)
– F.A.K.K. 2 (Ritual)
– Medal of Honor: Allied Assault (2015 & Dreamworks
Interactive)
– Medal of Honor: Pacific Assault (Electronic Arts)
• O código fonte de Quake e Quake II está
disponível livremente – http://www.idsoftware.com/business/techdownloads
Medal of Honor: Pacific Assault
Medal of Honor: Pacific Assault
A Família de Motores Unreal
• A Epic Games surgiu na cena FPS em 1998 com o
legendário jogo Unreal
• Desde então, o motor Unreal se tornou o maior
competidor da tecnologia Quake no espaço FPS
• O motor Unreal 2 é a base para Unreal Tournament
2004, e possui incontáveis “mods”, projetos
universitários e jogos comerciais
• O motor Unreal 3 é o próximo passo na evolução,
fornecendo algumas das melhores ferramentas e o
mais rico conjunto de características de motores de
jogos da indústria
A Família de Motores Unreal
• Muitos jogos têm sido desenvolvidos com o
motor Unreal 3 ultimamente, incluindo o
popular Gears of War
A Família de Motores Unreal
• Muitos jogos têm sido desenvolvidos com o
motor Unreal 3 ultimamente, incluindo o
popular Gears of War
O Motor Source do Half Life
• Source é o motor de jogos do jogo Half-Life 2 e
suas sequências: HL2: Episode One, HL2: Episode
Two, Team Fortress 2, e Portal (vendido em
conjunto com o título The Orange Box)
• Source é um motor de alta qualidade, rivalizando
com o motor Unreal 3 em termos de capacidade
gráfica e conjunto de ferramentas
O Motor Source do Half Life
• Source é o motor de jogos do jogo Half-Life 2 e
suas sequências: HL2: Episode One, HL2: Episode
Two, Team Fortress 2, e Portal (vendido em
conjunto com o título The Orange Box)
• Source é um motor de alta qualidade, rivalizando
com o motor Unreal 3 em termos de capacidade
gráfica e conjunto de ferramentas
XNA Game Studio da Microsoft
• Plataforma de desenvolvimento de jogos fácil de
usar e altamente acessível
• Tem por objetivo encorajar jogadores a criarem
seus próprios jogos e compartilhá-los com uma
comunidade de jogadores online, da mesma forma
que o YouTube encoraja a criação e
compartilhamento de vídeos caseiros
• XNA é baseado na linguagem C#
• O principal ambiente de desenvolvimento é o
Visual Studio
XNA Game Studio da Microsoft
• Permite a criação de jogos para PC, para o console
Xbox 360 e para Windows Phone
• Após o pagamento de uma taxa modesta, jogos
XNA podem ser publicados na rede Xbox Live e
compartilhado com amigos
• Por fornecer excelentes ferramentas a custo zero,
a Microsoft abriu as portas para o desenvolvedor
médio criar novos jogos
• XNA tem um futuro brilhante e fascinante pela
frente
XNA Game Studio da Microsoft
XNA Game Studio da Microsoft
Outros Motores Comerciais
• Existem vários motores comerciais no mercado
• Embora desenvolvedores independentes podem
não ter dinheiro para adquirir um motor, muitos
desses produtos possuem vasta documentação
online e/ou wikis que podem servir como uma
grande fonte de informação sobre motores e
programação de jogos em geral
• Ex. C4 Engine by Terathon Software
(http://www.terathon.com/)
Motores Proprietários in-House
• Muitas empresas constroem e mantêm seu
próprio motor de jogos
• A EA construiu muitos de seus jogos RTS
(estratégia em tempo real) com um motor
proprietário chamado SAGE, desenvolvido
pela Westwood Studios
Motores Proprietários in-House
• Os jogos da Naughty Dog Crash Bandicoot e
Jak and Daxter, além do recente Uncharted:
Drake´s Fortune foram todos desenvolvidos
com um motor customizado para as
plataformas PlayStation, PlayStation 2 e
PlayStation 3
• A maioria dos motores comerciais, como
Quake, Source e Unreal, começaram como
motores proprietários
Motores Open Source
• Motores profissionais e amadores disponibilizados
online, de graça
• Existe um grande número de motores open source
disponíveis online, alguns são bons, outros
medíocres, e outros...
• Alguns motores bem conhecidos:
– Unity, OGRE 3D, Panda 3D, Yake, Crystal Space,
Torque, Irrlicht, Cocos2d-x
Unity
• Unity surgiu como um dos mais populares motores
de jogos
• Principais características:
– “um potente mecanismo de renderização totalmente
integrado com um conjunto completo de ferramentas
intuitivas e fluxos de trabalho rápidos”
– Permite a criação de jogos 3D e 2D
– Voltado para estúdios e desenvolvedores independentes
(indies)
– Multi-plataforma: Web, Desktop, Console, Mobile
– Versões Pro ($75,00/mês ou $1.500,00) e Free
Unity
• Programado com UnityScript
– Um dialeto de JavaScript baseado em .NET
• Asset Store
– Uma loja cheia de recursos para tudo que é necessário
para o desenvolvimento de um jogo, incluindo animação,
áudio e scripts
– Mas também possui recursos gratuitos
• Comunidade
– Compartilhada por milhares de desenvolvedores
– Fóruns, perguntas e respostas, gestão de problemas e
feedback sobre novas ideias e versões
Unity
Unity
Unity
Unity
Cocos2d-x
• Motor de jogos open source mais popular do
mercado
• Incorpora duas principais linguagens: C++ e
Lua
• Também possui uma versão JavaScript
chamada Cocos2d-JS
• Possui uma natureza de múltiplas
plataformas, permitindo o desenvolvimento
para a maioria das plataformas móveis e
desktop
Cocos2d-x
Cocos2d-x
Cocos2d-x
ARQUITETURA DE MOTORES
DE JOGOS
DESENVOLVIMENTO DE JOGOS
Arquitetura de Motores de Jogos
• Um motor de jogos geralmente consiste de um
conjunto de ferramentas e componentes para
execução dos jogos
• Como todo software, um motor de jogos é
construído em camadas
– Normalmente camadas superiores dependem de
camadas inferiores, mas não o contrário
– Quando uma camada inferior depende de uma camada
superior, chamamos de dependência circular, que deve
ser evitada em qualquer sistema, por levar a um
indesejável acoplamento de sistemas
Arquitetura de Execução
Hardware, Drivers, SO
• Hardware
– Representa o sistema de computador ou console onde o
jogo será executado
• Drivers de Dispositivos
– Componentes de software de baixo nível fornecidos pelo
sistema operacional ou fabricante de hardware
– Gerenciam recurso de hardware e blindam o SO e
camadas superiores de detalhes de comunicação com a
variedade de dispositivos de hardware disponíveis
Hardware, Drivers, SO
• Sistema Operacional
– No PC, está em execução todo o tempo, gerenciando a
execução de múltiplos programas em um único
computador, um deles é o seu jogo, isto significa que um
jogo para PC nunca pode assumir que possui todo o
controle sobre a máquina
Hardware, Drivers, SO
• Sistema Operacional
– Em um console, o SO é apenas uma fina camada de
bibliotecas que é compilada diretamente no executável, o
jogo tipicamente é o “dono” de toda a máquina
– Entretanto, isso não ocorre no Xbox 360 e PlayStation 3,
onde o SO pode interromper a execução do jogo ou
tomar conta de certos recursos do sistema
– O vão entre desenvolvimento para PC e para consoles
está tipicamente se fechando (para o bem ou para o mal)
SDKs de Terceiros e Middleware
• A maioria dos motores alavancam uma série de
SDKs e middleware de terceiros
• As interfaces funcionais ou baseadas em classes
fornecidas por um SDK são geralmente chamadas
de APIs (Application Programming Interface)
• Veremos alguns exemplos...
Algoritmos e Estruturas de Dados
• Como qualquer software, jogos dependem
massivamente de uma coleção de algoritmos e
estruturas de dados
• Exemplos de bibliotecas de terceiros com estes
tipos de serviços:
– STL: biblioteca de modelos padrões C++ que fornece
código e algoritmos para gerenciamento de estruturas de
dados, strings e I/O streams
– STLport: implementação portável e otimizada de STL
– Boost: poderosa biblioteca de algoritmos e estruturas de
dados no estilo STL (http://www.boost.org/)
– Loki: biblioteca de modelos de programação genérica
que irá fazer o seu “cérebro doer”!
Gráficos
• A maioria dos motores de renderização de
jogos são construídos no topo de bibliotecas
de interfaces de hardware, como por
exemplo:
– Glide: SDK de gráficos 3D para a placa gráfica
Voodoo, popular antes da era DirectX 8
– OpenGL: largamente utilizada e portável SDK de
gráficos 3D
– DirectX: SDK gráfico da Microsoft e principal rival
do OpenGL
Gráficos
• Mais exemplos:
– libgmc: interface direta de baixo nível para o
PlayStation 3 fornecida pela Sony como uma
alternativa mais eficiente do OpenGL
– Edge: poderoso e muito eficiente motor de
animação e renderização 3D produzido pela
Noughty Dog e Sony para PlayStation 3 e usado
por um grande número de estúdios de jogos
Colisão e Física
• Detecção de colisão e dinâmica rígida de corpos
(ou simplismente “física” na comunidade de jogos)
são fornecidos pelas seguintes SDKs bem
conhecidas:
– Havok: motor bastante popular
– PhysX: outro motor popular disponibilizado gratuitamente
pela NVIDIA
– Open Dynamics Engine (ODE): pacote open source de
física/colisão
Animação de Personagens
• Granny: popular conjunto de ferramentas da Rad
Game Tools que inclui modelos robustos 3D e
exportadores de animação para os principais
pacotes de modelo e animação 3D como Maya, 3d
Studio MAX, etc.
• Havok Animation: SDK complementar de animação
do popular SDK de física Havok
• Edge: biblioteca produzida pelo time da ICE, a
Naughty Dog e Sony para PS3
Inteligência Artificial
• Até recentemente, IA era manipulada de maneira
customizada para cada jogo
• Entretanto uma empresa chamada Kynogon
produziu um middleware chamado Kynapse
• Kynapse: este SDK fornece blocos de construção
de IA de baixo nível como path finding, desvio de
objetos estáticos e dinâmicos, identificação de
vulnerabilidades dentro de um espaço (ex. uma
janela aberta pela qual uma emboscada pode vir),
e uma razoavelmente boa interface entre IA e
animação
Modelos Biomecânicos de Personagens
• Endorphin e Euphoria: estes pacotes de
animação produzem movimentos de
personagens usando modelos biomecânicos
avançados de movimento humano realístico
Camada Independente de Plataforma
• A maioria dos motores precisam rodar em mais de uma
plataforma de hardware
• Portanto, elas são arquitetadas com uma camada
independente de plataforma, acima do hardware, drivers,
SO e outros programas de terceiros e blinda o motor da
maioria do conhecimento sobre a plataforma subjacente
• Através do empacotamento ou substituição da biblioteca C
mais comumente usada, chamadas ao SO e outras APIs
fundamentais, esta camada garante comportamento
consistente através de todas as plataformas de hardware
Sistemas Centrais
• Toda aplicação complexa requer um pacote de
utilitários, categorizados como “sistemas centrais”,
como:
– Assertions: linhas de código para verificação de erros
– Memory management: virtualmente cada motor de jogo
implementa seu próprio sistema de alocação de memória
a fim de aumentar o desempenho e evitar fragmentação
– Math library: bibliotecas para facilitar os cálculos
matemáticos intensivos que os jogos requerem, etc.
Gerenciador de Recursos
• Presente em todos os motores de jogos de alguma
forma, fornece uma interface unificada (ou conjunto
de interfaces) para acesso a todos os tipos de
recursos de um jogo e outros dados de entrada
Motor de Renderização
• Um dos maiores e mais complexos
componentes de qualquer motor de jogos
• Pode ser arquitetado de muitas maneiras
diferentes
• Uma maneira comum e de abordagem
efetiva de projetar um motor de renderização
é empregar uma arquitetura em camadas
como a apresentada a seguir
Motor de Renderização
Motor de Renderização
• Renderizador de baixo nível
– Engloba toda a parte “bruta” de renderização do motor
– Neste nível o projeto é focado na renderização de uma
coleção de primitivas geométricas tão rápido e rico
quanto possível, sem preocupação com partes visíveis
da cena
• Otimizações de Gráficos de Cena
– Limita o número de primitivas submetidas para
renderização, baseada em alguma forma de
determinação de visibilidade
Motor de Renderização
• Efeitos Visuais
– Motores de jogos modernos dão suporte a uma vasta
variedade de efeitos visuais, como:
• Sistemas de partículas (fumaça, fogo, jatos de água, etc.)
• Sistemas de decalque (para buracos de balas, pegadas, etc.)
• Mapeamento de luz e do ambiente
• Sombras dinâmicas
• Correção de cores, efeitos de saturação, etc.
• Fachada (front end)
– Muitos jogos empregam alguns tipos de gráficos 2D em
uma cena 3D, com várias finalidades:
• Mostrar alertas do jogo, menus internos do jogo, GUIs internas
para manipulação de inventário, configuração de unidades para
batalha ou realização de tarefas complexas do jogo
Motor de Renderização
• Ferramentas de registro e debugging
– Jogos são sistemas de tempo real, e, como tal,
engenheiros sempre precisam registrar a performance de
seus jogos de maneira a otimizá-la
– Recursos de memória, por outro lado, são geralmente
escassos, fazendo com que desenvolvedores façam uso
de ferramentas de análise de memória
– Essa camada engloba estas ferramentas e também inclui
meios para correção de erros
– Existe uma série de boas ferramentas com esses fins:
• Vtune da Intel
• Quantify e Purify da IBM
• Bounds Checker da Compuware
Motor de Renderização
• Ferramentas de registro e debugging
– Jogos são sistemas de tempo real, e, como tal,
engenheiros sempre precisam registrar a performance de
seus jogos de maneira a otimizá-la
– Recursos de memória, por outro lado, são geralmente
escassos, fazendo com que desenvolvedores façam uso
de ferramentas de análise de memória
– Essa camada engloba estas ferramentas e também inclui
meios para correção de erros
– Existe uma série de boas ferramentas com esses fins:
• Vtune da Intel
• Quantify e Purify da IBM
• Bounds Checker da Compuware
Motor de Renderização
• Colisão e Física
– Detecção de colisão é importante em todos os jogos
• Sem ela, objetos poderiam interpenetrar e seria impossível
interagir com o mundo virtual de uma maneira razoável
– Alguns jogos também incluem uma dinâmica de
simulação realística ou semi-realística
– Colisão e física estão fortemente acoplados
• Isto ocorre porque quando colisões são detectadas, elas quase
sempre resultam como parte da integração da física com a lógica
de satisfação de restrições
– SDKs:
• Havok: padrão da indústria atual
• PhysX da NVIDIA, integrado ao motor Unreal 3, livre
para PC
Motor de Renderização
• Colisão e Física (cont.)
– SDKs:
• Open Dynamics Engine (ODE)
• I-Collide, V-Collide e RAPID, desenvolvidos pela
Universidade da Carolina do Norte
Motor de Renderização
• Animação
– Todo jogo que possui personagem orgânicos ou semi-
orgânicos (humanos, animais, desenhos, ou mesmo
robôs) precisam de um sistema de animação
– Existem cinco tipos básicos de animação utilizadas em
jogos:
• Animação de sprites/texturas
• Animação hierárquica de corpos rígidos
• Animação de esqueletos (mais utilizada atualmente)
• Animação de vértices
• Alvos de transformação
Motor de Renderização
• Animação
– Todo jogo que possui personagem orgânicos ou semi-
orgânicos (humanos, animais, desenhos, ou mesmo
robôs) precisam de um sistema de animação
– Existem cinco tipos básicos de animação utilizadas em
jogos:
• Animação de sprites/texturas
• Animação hierárquica de corpos rígidos
• Animação de esqueletos (mais utilizada atualmente)
• Animação de vértices
• Alvos de transformação
Motor de Renderização
• Dispositivos de Interface Humana
– Todos os jogos precisam processar entradas dos
jogadores, obtidas de vários dispositivos de interface,
incluindo:
• Teclado e mouse
• Joypad/joystick
• Outros controles especializados, como volantes, varas de
pescar, tapetes de dança, WiiMote, etc.
– Algumas vezes estes componentes podem ser do tipo
I/O, por fornecer saídas ao jogador como force feedback
ou áudio
Motor de Renderização
• Dispositivos de Interface Humana
– Todos os jogos precisam processar entradas dos
jogadores, obtidas de vários dispositivos de interface,
incluindo:
• Teclado e mouse
• Joypad/joystick
• Outros controles especializados, como volantes, varas de
pescar, tapetes de dança, WiiMote, etc.
– Algumas vezes estes componentes podem ser do tipo
I/O, por fornecer saídas ao jogador como force feedback
ou áudio
Dispositivos de Interface Humana
Áudio
• Tão importante quanto gráficos em qualquer motor
de jogos
• Infelizmente, geralmente possui menos atenção
que renderização, física, animação, IA e gameplay
• Entretanto, nenhum grande jogo está completo
sem um ótimo motor de áudio
• Motores de áudio variam muito em
sofisticação
Multijogadores Online/Rede
• Muitos jogos permitem múltiplos jogadores
humanos em um único mundo virtual
• Existem basicamente quatro tipos:
– Multijogadores em uma única tela: dois ou mais
dispositivos de controle são conectados a uma única
máquina. Múltiplos personagens de jogadores coabitam
em um único mundo virtual e uma única câmera mantém
todos os personagens simultaneamente na janela. Ex.:
Smash Brothers, Lego Star Wars e Gauntlet
– Multijogadores em tela dividida: equivalente ao modo
anterior, mas cada personagem possui sua própria
câmera e a tela é dividida em seções
Multijogadores Online/Rede
• Existem basicamente quatro tipos (cont.):
– Multijogadores em rede: múltiplos computadores ou
consoles conectados em rede, onde cada máquina
hospeda um dos jogadores
– Jogos online multijogadores massivos (MMOG):
centenas a milhares de usuários jogando
simultaneamente, dentro de um mundo virtual enorme e
persistente, hospedado por uma poderosa bateria de
servidores centrais
Multijogadores Online/Rede
• Existem basicamente quatro tipos (cont.):
– Multijogadores em rede: múltiplos computadores ou
consoles conectados em rede, onde cada máquina
hospeda um dos jogadores
– Jogos online multijogadores massivos (MMOG):
centenas a milhares de usuários jogando
simultaneamente, dentro de um mundo virtual enorme e
persistente, hospedado por uma poderosa bateria de
servidores centrais
Sistemas Fundamentais do Gameplay
• O termo gameplay se refere às ações que ocorrem
durante o jogo, as regras que governam o mundo
virtual, as habilidades do personagem do jogador
(conhecida como mecânica do jogador) e dos
outros personagens e objetos do mundo, e as
metas e objetivos dos jogadores
• É tipicamente implementado na linguagem nativa
do motor de jogos ou em linguagem de script de
alto nível, ou em ambos
Sistemas Fundamentais do Gameplay
• O termo gameplay se refere às ações que ocorrem
durante o jogo, as regras que governam o mundo
virtual, as habilidades do personagem do jogador
(conhecida como mecânica do jogador) e dos
outros personagens e objetos do mundo, e as
metas e objetivos dos jogadores
• É tipicamente implementado na linguagem nativa
do motor de jogos ou em linguagem de script de
alto nível, ou em ambos
Modelos de Objetos
• O modelo de objetos do jogo fornece simulação em
tempo real de uma coleção heterogênea de objetos
do mundo virtual do jogo, que incluem:
– Geometria de fundo estática, como construções,
estradas, terrenos, etc.
– Corpos rígidos dinâmicos, como rochas, latas, cadeiras,
etc.
– Personagens do jogador (PC)
– Personagens que não são o jogador (NPC)
– Armas, projéteis, veículos
– Luzes, câmeras, etc.
Modelos do Mundo
• O modelo do mundo do jogo está fortemente ligado
ao modelo de objetos do software e responde a
perguntas do tipo:
– Seu motor é projetado de uma maneira orientada a
objetos?
– Qual a linguagen? C? C++? Java? OCaml?
– Como a hierarquia está organizada?
– Como os objetos são referenciados?
– Como os objetos são unicamente identificados?
– Como o tempo de vida dos objetos são gerenciados?
– Como o estado dos objetos do jogo são simulados
através do tempo?
Sistema de Eventos
• Objetos do jogo precisam invariavelmente se
comunicar
• Isto pode ser feito de várias maneiras, por
exemplo, um objeto envia a mensagem
simplesmente chamando uma função do objeto
recebedor
• Uma arquitetura dirigida a eventos, também é uma
abordagem comum para comunicação entre
objetos: o evento contendo a mensagem é passado
ao objeto recebedor através de uma chamada a
uma função manipuladora de eventos
Sistema de Script
• Muitos motores de jogos utilizam uma
linguagem de script para desenvolvimento de
regras específicas do gameplay, permitindo
desenvolvimento mais rápido e mais fácil
Fundamentos de IA
• Tradicionalmente, IA não era considerada parte do
motor de jogos
• Mais recentemente, entretanto, empresas de jogos
têm reconhecido padrões que são utilizados em
quase todo sistema de IA
• Uma empresa chamada Kynogon desenvolveu um
motor de IA comercial chamado Kynapse, que
inclui características como:
– Uma rede de nós definindo áreas ou caminhos de
navegação onde personagens são livres para se
movimentar sem a possibilidade de colidir com a
geometria estática do mundo
Fundamentos de IA
• Características do Kynapse (cont.):
– Informação de colisão simplificada em torno dos limites
de cada área de navegação livre
– Conhecimento das entradas e saídas de cada região e
de onde em cada região um inimigo pode ver e/ou
emboscar o jogador
– Um motor de path-finding, conhecido como algoritmo A*
– Um modelo customizado do mundo que diz ao sistema
de IA onde todas as entidades de interesse (amigos,
inimigos, obstáculos) estão, permitindo evitar
dinamicamente a movimentação de objetos
– Etc.
Subsistemas Específicos do Jogo
• Acima da camada de sistemas fundamentais do
gameplay e de outros componentes de baixo nível
do motor, programadores e projetistas cooperam
para implementar as características do jogo em si
• Estes são geralmente numerosos, muito variáveis e
específicos do jogo em desenvolvimento
• Inclui, mas não está limitado a: mecânica do
personagem do jogador, sistemas de câmera do
jogo, IA para controle de NPCs, sistemas de
armas, veículos, etc.
Subsistemas Específicos do Jogo
• Acima da camada de sistemas fundamentais do
gameplay e de outros componentes de baixo nível
do motor, programadores e projetistas cooperam
para implementar as características do jogo em si
• Estes são geralmente numerosos, muito variáveis e
específicos do jogo em desenvolvimento
• Inclui, mas não está limitado a: mecânica do
personagem do jogador, sistemas de câmera do
jogo, IA para controle de NPCs, sistemas de
armas, veículos, etc.
FERRAMENTAS E LINHA DE
PRODUÇÃO DE RECURSOS
DESENVOLVIMENTO DE JOGOS
Ferramentas e Linha de Produção de
Recursos
• Qualquer motor de jogos deve ser capaz de
lidar com uma grande quantidade de dados e
recursos do jogo, arquivos de configuração,
scripts, etc.
Ferramentas para Criação de
Conteúdo Digital
Ferramentas para Criação de
Conteúdo Digital
Ferramentas para Criação de
Conteúdo Digital
Ferramentas para Criação de
Conteúdo Digital
Mundo do Jogo
Objetos
Objetos
Objetos
Modelos
de Objetos
Animações
Materiais
Texturas
Sistema
de
Partículas
Banco de
Sons