A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Arquitetura de Motores de Jogos

Apresentações semelhantes


Apresentação em tema: "Arquitetura de Motores de Jogos"— Transcrição da apresentação:

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

2 Implementação Linguagem Jogo Compilador Ferramentas Motor Bibliotecas
Visual C++,... Unreal, Lithtech,... Motor Bibliotecas DirectX, OpenGL,... Sistema Operacional Windows, Linux,... Hardware (+ placas) Editores de imagens 2D Modeladores 3D Processadores de sons e músicas Editores de cenários

3 Roteiro Bibliotecas para jogos (DirectX) Frameworks para jogos
Componentes de um framework

4 Bibliotecas OpenGL e OpenAL DirectX
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 Interface 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 ponteiro_interface -> nome_método ( lista_parâmetros );
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 idéia básica: surface é substituído por texture
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 ( US$ ,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...

27 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
Gerenciador de Mensagens Gerenciador multiplayer Gerenciador principal Gerenciador gráfico Usuário Entrada Tela Editor de cenários Gerenciador do mundo Gerenciador de som Amplificadores Gerenciador de objetos IA

30 O Forge 16V – Principais Módulos
Gerenciador de Log Gerenciador de Som Gerenciador de Entrada Gerenciador Principal Gerenciador Gráfico Modular O que já foi feito Gerenciador de Modelagem Física Gerenciador do Mundo Gerenciador de Multiusuários Legenda (6 meses) Em estado funcional Implementação parcial Editor de Cenários Gerenciador de IA 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 Gerenciador principal Gerenciador gráfico Editor de cenários
Tela Editor de cenários Mouse Entrada Console Gerenciador principal

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:

44 Colisão Vantagens Desvantagem 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 Gerenciador principal Gerenciador de Mensagens
multiplayer Gerenciador principal Gerenciador gráfico Usuário Entrada Tela Editor de cenários Gerenciador do mundo Gerenciador de som Amplificadores Gerenciador de objetos 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: 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.


Carregar ppt "Arquitetura de Motores de Jogos"

Apresentações semelhantes


Anúncios Google