53
1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

Embed Size (px)

Citation preview

Page 1: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

1

Arquitetura de Motores de Jogos

Carlos André C. Pessoa

Eduardo Sampaio Rocha

Geber Ramalho

Page 2: 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

Page 3: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

3

Roteiro

Bibliotecas para jogos (DirectX)

Frameworks para jogos

Componentes de um framework

Page 4: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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)

Page 5: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 6: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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, ....

Page 7: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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++

Page 8: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

8

DirectX Recursos necessários para criar uma aplicação

Page 9: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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 );

Page 10: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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)

Page 11: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 12: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

12

DirectX 9.0c API (pacotes)

Direct3D

DirectMusic

DirectSound

DirectPlay

DirectInput

DirectShow

Page 13: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 14: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 15: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 16: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 17: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 18: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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 ...

Page 19: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 20: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 21: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

21

Game Engine (motor ou framework)

Page 22: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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.

Page 23: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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!

Page 24: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 25: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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!

Page 26: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

26

Trocando em miúdos...

Page 27: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

Antes de mais nada, o laço principal!

Page 28: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 29: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 30: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 31: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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).

Page 32: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

32

Diagrama

EntradaMouse

Gerenciadorgráfico

Tela

Editor de cenários

Console

Gerenciadorprincipal

Page 33: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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.

Page 34: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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.

Page 35: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 36: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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.

Page 37: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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.

Page 38: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

38

Gerenciador de Mensagens

Gerencia as mensagens de Debug do motor e do jogo. Estas mensagens podem ser enviadas para:

Console Arquivo Rede Impressora, ...

Page 39: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 40: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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.

Page 41: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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.

Page 42: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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;

Page 43: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 44: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

44

Colisão

Vantagens Facilidade de implementação Velocidade de processamento

Desvantagem A Corretude depende da

forma do objeto

Page 45: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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();

Page 46: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 47: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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.

Page 48: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 49: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

49

Page 50: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 51: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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

Page 52: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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.

Page 53: 1 Arquitetura de Motores de Jogos Carlos André C. Pessoa Eduardo Sampaio Rocha Geber Ramalho

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.