1 arquitetura de motores de jogos carlos andré c. pessoa eduardo sampaio rocha geber ramalho
Post on 22-Apr-2015
105 Views
Preview:
TRANSCRIPT
1
Arquitetura de Motores de Jogos
Carlos André C. Pessoa
Eduardo Sampaio Rocha
Geber Ramalho
2
Implementação
Sistema Operacional
Bibliotecas
Motor
Jogo
Hardware (+ placas)
DirectX, OpenGL,...
Windows, Linux,...
Unreal, Lithtech,...
Ferramentas
Editores de imagens 2DModeladores 3DProcessadores de sons e músicasEditores de cenários
Visual C++,...LinguagemCompilador
3
Roteiro
Bibliotecas para jogos (DirectX)
Frameworks para jogos
Componentes de um framework
4
Bibliotecas OpenGL e OpenAL
Maior interoperabilidade e flexibilidade Futuro incerto Inclui APIs gráficas e sonoras
DirectX Ambiente Windows A mais utilizada (90 % dos jogos, Tocadores de
música e video, aplicações multiusuário em rede Inclui várias APIs (gráficas, de vídeo, sonoras, de
rede, de configuração e de tratamento de entrada)
5
DirectX
O que é extremamente necessário saber para utilizar as APIs DirectX?
Criar aplicações Win32 Trabalhar com ponteiros (C / C++) Manipular objetos COM Tratar os códigos de retorno dos métodos
6
Component Object Model (COM) Quebrar projetos de software monolíticos em
componentes modularizados, reutilizáveis dinamicamente em tempo de execução (DLLs)
Arquitetura baseada em interfaces, cada uma possuindo um identificador único
Com COM é possível modificar um software sem que seja preciso recompilá-lo novamente
Cada nova versão da implementação de um componente deve ser compatível com a anterior
IDirectDraw - IID_IDirectDraw - DirectX 1 IDirectDraw2 - IID_IDirectDraw2 - DirectX 2 IDirectDraw4 - IID_IDirectDraw4 - DirectX 6, ....
7
DirectX Objeto COM
classe C++ ou um conjunto de classes C++ que implementam interfaces (conjunto de funções)
implementado numa DLL (Dynamic Link Library) Escrever um objeto COM é difícil, mas utilizá-lo é fácil
Interface COM é uma classes abstrata C++, que descreve um
conjunto de assinaturas e semânticas, sem implementação
utilizam vtable (tabela de endereçamento dos métodos que implementam a interface) <=> funções virtuais C++
8
DirectX Recursos necessários para criar uma aplicação
9
DirectX Todo objeto e interface COM possui um GUI
(Globally Unique Identifier) que o torna único
Bibliotecas de importação (Libs) que contém os pacotes COM DirectX devem ser incluídas na compilação de programas
Na essência, toda chamada para DirectX utiliza o seguinte formato
ponteiro_interface -> nome_método ( lista_parâmetros );
Ex: DirectDrawCreate ( NULL , &lpdd , NULL); lpdd -> SetVideoMode ( 640 , 480 , 256 );
10
DirectX
HAL x HEL Na criação de um objeto DirectX, uma consulta
é realizada no hardware para verificar quais operações ele é capaz de executar (HAL) e quais devem emuladas por software (HEL)
Ambiente com melhor desempenho que o DOS, devido a utilizar todas as características do hardware, e infinitamente melhor que a GDI (graphics Device Interface)
11
DirectX Códigos de retorno dos métodos
Código de retorno é o valor retornado quando o método finaliza, indicando sucesso ou falha
Todos são do tipo HRESULT (número de 32 bits) - indica se a chamada ao método obteve sucesso ou falha e o porque
HRESULT é passado como argumento para as macros SUCCEEDED () e FAILED ()
A utilização de macros apresenta um código mais limpo Códigos de falha devem ser utilizados para tratamentos
específicos (ex: DDERR_OUTOFVIDEOMEMORY ) Um esforço significativo deve ser feito na estruturação
do código para realizar o tratamento de erros
12
DirectX 9.0c API (pacotes)
Direct3D
DirectMusic
DirectSound
DirectPlay
DirectInput
DirectShow
13
DirectDraw (DirectX7) Características
Suporte a gráficos 2D, vídeos e aceleração por hardware
Ainda muito Usada para jogos 2D, tratamento de imagens e texturas
Manipula diretamente a memória de vídeo, usando surfaces, processadas por blitting
Realiza flipping, evitando que o sincronismo do monitor atrapalhe o processamento dos frames
Suporta os modos de janela e tela cheia em várias resoluções de acordo com os recursos do hardware
Compatível com GDI
14
Direct3D
Características Biblioteca de baixo nível ideal para desenvolver
jogos 3D e outras aplicações de alta performance
Permite comunicação de baixo nível com as placas aceleradoras de forma independente do hardware
Utiliza Z-buffers e W-buffers Suporta iluminação, materialização,
texturização e mip-mapping Suporta hierarquias de objetos e animações
15
2D x 3D
2D no 3D desvantagens
Não é simples contrariamente ao que diz o site Funções específicas na API ID3DXSprite mas
pouca documentação e nenhum exemplo vantagens
utiliza capacidade de renderização das placas
idéia básica: surface é substituído por texture
16
DirectMusic
Características Trabalha com dados musicais baseados em
mensagens, que são convertidos para representações digitais (wave) utilizando hardware ou sintetizador de software
Utiliza DirectSound como base para acesso ao dispositivo de som
Permite também a captura e execução de sons MIDI
Suporta composição de músicas em tempo de execução
17
DirectSound
Características Permite manipular diretamente o dispositivo de
som Suporta mixagem com baixa latência,
aceleração por hardware, execução e captura de sons wave
Utiliza todos os serviços oferecidos pelo hardware, como simulação de sons em um ambiente 3D, incluindo Doppler shift, refração, reflexão, efeitos stereo
18
DirectPlay
Características Permite criar jogos multiusuários, servidores de
jogos, chats, e outras aplicações em rede sem a necessidade de escrever código para tipos de transporte, protocolos ou serviços online
Permite conexão em rede local, na Internet ou via modem
Permite criação e junção de sessões Suporta lobbies (agrupamento de jogadores) Gerencia jogadores e grupos com uma sessão ...
19
DirectInput
Características Permite acesso direto aos dispositivos de
entradas, tais como mouse, teclado e joystick, e outros controladores de jogos, bem como dispositivos force-feedback (entrada/saída)
Provê suporte em baixa latência
20
DirectShow
Características Permite execução e captura de streams
multimídia, tais como: vídeo (MPEG, Quicktime, AVI) e áudio (WAV) de arquivos locais ou da Internet
Captura pode ser baseada em Video for Windows ou Windows Driver Model (WDM)
Composto por um sistema modular de filtros Integrado com o Windows Media Player
21
Game Engine (motor ou framework)
22
Motor Motivação
Um jogo leva de 2 a 5 anos para ser desenvolvido Uma grande parte do desenvolvimento envolve a
“reinvenção da roda”: Gerenciador de sprites Manipulador de som Controle de interface de entrada Renderização, Detecção de colisão, ...
Termina-se levando mais tempo nos detalhes técnicos do que no próprio jogo.
23
Motor Oferece as funcionalidades básicas
necessárias porque Controla as mídias envolvidas Trata e abstrai as características de mais baixo
nível Ajudam a garantir qualidade
Reutilizar genéricas partes (componentes) genéricas do programa de um jogo Para não ter de reprogramar E retirar bugs!
24
Motor
Estruturar melhor o jogo reutilizando alguma arquitetura
É complexo e caro Milhares de linhas de código Gráfico: Unreal (www.unreal.com): US$
500.000,00
25
Framework
Isto corresponde à noção de Framework em engenharia de software
Conjunto de componentes ou API que cobre os requisitos básicos e recorrentes de uma determinada classe de aplicações!
26
Trocando em miúdos...
Antes de mais nada, o laço principal!
28
Componentes Do que seria composto
este framework?
Como fazer a comunicação entre estas diversas partes?
Componentes Interface de Entrada Gerenciador Gráfico Gerenciador de Som Gerenciador de IA Gerenciador de Múltiplos
Jogadores Gerenciador de
Mensagens Gerenciador de Objetos Gerenciador do Mundo Editor de Cenários Gerenciador Principal
29
wGEM – Principais Módulos
Gerenciadorprincipal
EntradaUsuário
Gerenciador de Mensagens
Gerenciador do mundo
Gerenciador deobjetos
Gerenciadorgráfico
Tela
Gerenciadormultiplayer
Gerenciador desom
AmplificadoresEditor de cenários
IA
30
O Forge 16V – Principais Módulos
Gerenciador Principal
Gerenciador Principal
Gerenciador de Entrada
Gerenciador de Entrada
Gerenciador Gráfico
Gerenciador Gráfico
Gerenciador de Som
Gerenciador de Som
Gerenciador do Mundo
Gerenciador de
Multiusuários
Gerenciador de IA
Gerenciador de
Modelagem Física
Editor de Cenários
Gerenciador de Log
Gerenciador de Log
Legenda (6 meses)
Em estado funcional
Implementação parcial
Não implementado
31
Interface de Entrada Comunicação homem->máquina
Lida com leitura de teclado, mouse, joysticks, etc. Thread de execução pode ser independente do
principal Deve disponibilizar uma interface para consulta do
estado atual dos dispositivos Envio do evento ocorrido em um dispositivo para
outro componente (Event Listener).
32
Diagrama
EntradaMouse
Gerenciadorgráfico
Tela
Editor de cenários
Console
Gerenciadorprincipal
33
Gerenciador Gráfico
Comunicação máquina->homem Incorpora toda a complexidade envolvida no
processo de transformação da descrição de um cena em dados para a memória de vídeo.
Em geral trabalha com imagens em formatos proprietários e encriptados.
Quando 2D: Basicamente gerencia o estado dos pixels da tela
a partir da descrição dos diversos objetos que formam a cena a ser renderizada.
34
Gerenciador Gráfico
Quando 3D Primeiramente lida com transformações
geométricas de polígonos, mapeamento de texturas, iluminação, etc.
Realiza uma Projeção do 3D para 2D. Depois disso o processo segue como no caso
2D.
35
Gerenciador Gráfico
Além das cenas do jogo, ele deve prover uma interface com o usuário de alto nível (GUI)
Menus Botões Barra de Progresso Textos Combo Listas
36
Gerenciador de Som
Responsável pelo processamento sonoro ao longo do jogo.
Execução de sons a partir de eventos de maneira sincronizada
Conversão e processamento de amostras de som
Efeitos Som 3D
Em geral jogos profissionais trabalham com formatos de arquivos proprietários, diferentes daqueles conhecidos pelo sistema operacional.
37
Gerenciamento de IA
Gerencia o comportamento de objetos controlados pela máquina
Realiza certas ações de acordo com o estado atual do jogo e algumas regras.
Complexidade varia de acordo com o tipo de jogo ou determinado nível.
A maioria dos motores definem uma linguagem (script) que serve para modelar o comportamento de um objeto.
38
Gerenciador de Mensagens
Gerencia as mensagens de Debug do motor e do jogo. Estas mensagens podem ser enviadas para:
Console Arquivo Rede Impressora, ...
39
Gerenciador de Múltiplos Jogadores
Permite que jogadores do mesmo jogo comuniquem-se entre si
Lida basicamente com o gerenciamento da conexão e troca de informações entre os diversos computadores conectados.
Provê toda a infra-estrutura cliente/servidor Deve ser executado em um thread diferente do
principal
40
Gerenciador de Objetos
Que objetos? Um objeto representa qualquer “coisa” que está
presente no estado atual do jogo.
Tais objetos são passíveis de movimento e interação entre si.
A interação se dá por troca de informações Por exemplo, se o objeto “bala” detectou que
atingiu algum alvo, uma mensagem será enviada ao alvo para que o mesmo mude de estado.
41
Gerenciador de Objetos
Em um jogo existem vários gerenciadores de objetos.
Cada um é encarregado de gerenciar parte dos objetos e comunicar-se com os demais gerenciadores
Exemplo: Num jogo como BreakOut, podemos ter um gerenciador para a raquete do usuário, outro para a bola e um terceiro para todos os tijolos.
42
Gerenciador de Objetos
Manipulação de colisão Corresponde a uma dos principais papéis do
gerenciador de objetos Pode ser implementada de seguinte forma:
Cada objeto informa se está colidindo com outro. Para conseguir tal informação:
Cada objeto possui um retângulo que o engloba; Para saber se dois objetos se colidem, basta testar
se os dois retângulos tem algum ponto em comum;
43
Gerenciador de Objetos
Detecção de colisão baseada em retângulos:
x
yA
B
Ax1 Ax2
Bx1 Bx2
Ay1
Ay2
By1
By2
se ((Bx1 > Ax2) ou(Ax1 > Bx2) ou(By1 > Ay2) ou(Ay1 > By2))
não há colisãosenão
há colisãox
yA
B
Ax1 Ax2
Bx1 Bx2
Ay1
Ay2
By1
By2
se ((Bx1 > Ax2) ou(Ax1 > Bx2) ou(By1 > Ay2) ou(Ay1 > By2))
não há colisãosenão
há colisão
44
Colisão
Vantagens Facilidade de implementação Velocidade de processamento
Desvantagem A Corretude depende da
forma do objeto
45
Gerenciador de Objetos Tratamento da colisão
Uma vez que cada objeto implementa o algoritmo de colisão.
Se um objeto “a” detecta que colidiu com “b”, “a” irá alertar “b” e o mesmo por sua vez irá alertar seu gerenciador sobre o ocorrido.
Exemplo: No caso da colisão acima, “a” poderia executar o seguinte
código: b.atingido();
Com isso, “b” iria executar: meuGerenciador.manipuleColisao();
46
Gerenciador do Mundo É o gerenciador do estado atual do jogo
Basicamente lida com os diversos gerenciadores de objetos para ditar o que deve ser feito
Em geral é associado com um editor de cenários Descreve o estado inicial do mundo em cada nível do
jogo Salva e carrega o estado atual
47
Algumas Considerações
O Gerenciador de mundo e de objetos Quanto mais definido, mais específico é o motor Grande discussão sobre quando termina o motor
e começa o jogo ! Os motores baseados em surface (2D) sofrem
mais deste problema que os 3D.
48
Editor de Cenários Ferramenta para descrição de estados do jogo de
forma visual e sem necessidade de programação Em geral é utilizada para gerar as diversas instâncias
do jogo (níveis)
Ao final deve gerar um arquivo a ser processado pelo gerenciador do mundo para inicializar cada nível
Exemplo Editor de cenários do jogo Starcraft
49
50
Gerenciador Principal
Realiza a harmonia entre todas as partes citadas
Ponte para acesso aos componentes e troca de informações (controle de fluxo)
Representa a “fachada” de todo o projeto Local de acesso único (Singleton) Concentrador dos estados e erros de todas as
partes
51
Um Possível Diagrama
Gerenciadorprincipal
EntradaUsuário
Gerenciador de Mensagens
Gerenciador do mundo
Gerenciador deobjetos
Gerenciadorgráfico
Tela
Gerenciadormultiplayer
Gerenciador desom
AmplificadoresEditor de cenários
IA
52
Conclusão
O Uso de um motor de jogos traz uma série de benefícios para o ciclo de desenvolvimento de um jogo
Clareza Reusabilidade Divisão de tarefas Organização, etc.
53
Referências Inside Direct3D, Peter Kovach Tricks of the Windows Game Programming Gurus, André
Lamothe DirectDraw x Directx3D8:
www.gamasutra.com/features/20010615/geczy_01.htm Charles Andryê Galvão Madeira. Forge V8: um Framework
para o Desenvolvimento de Jogos de Computador e Aplicações Multimídia. Dissertação de Mestrado do CIn-UFPE.
Carlos André Cavalcante Pessoa. wGEM: um Framework de Desenvolvimento de Jogos para Dispositivos Móveis. Dissertação de Mestrado do CIn-UFPE.
Eduardo Sampaio Rocha. Forge 16v: Um Framework para Desenvolvimento de Jogos Isométricos. Dissertação de Mestrado do CIn-UFPE.
top related