Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)

Post on 09-Jul-2015

514 views 7 download

description

Aula sobre motores de jogos do curso de Ciência da Computação da Universidade Estadual do Sudoeste da Bahia (UESB)

Transcript of Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)

Arquitetura de Motores de

Jogos

Fábio Moura fabio.mpereira@uesb.edu.br

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

Arquitetura de Motores de

Jogos

Fábio Moura fabio.mpereira@uesb.edu.br