Arquitetura de Motores de Jogos

Slides:



Advertisements
Apresentações semelhantes
Tópicos Especiais I: Engines Engines 3D
Advertisements

Sistemas Operacionais
Sistemas Distribuídos
Capitulo 6: Entrada e Saída
Metodologia de testes Nome: Gustavo G. Quintão
Sistemas distribuídos Metas de Projeto Prof. Diovani Milhorim
A Interface entre Processadores e Periféricos
APSOO Aula 05.
Entrada e Saída Introdução.
UML Visões – Parte 2.
Tecnologia Hipermídia e Multimídia
Projeto conceitual Mostra ao cliente exatamente o que o sistema fará
Engenharia de Software
Engenharia de Software
Modo Gráfico x Modo Texto
Conceitos Básicos de Computação
Conceitos Básicos de Computação O ABC da Computação.
Interação Cliente Servidor
CAPÍTULO Sistemas de supervisão 2. Sistema SCADA
Device Drivers no Windows e Linux Visão Geral e Boas Práticas
Sistemas Operacionais
INTRODUÇÃO À COMPUTAÇÃO
Aspectos Avançados em Engenharia de Software Aula 3 Fernanda Campos
Hardware/Software para Multimédia
Remodelando a solução mais eficaz
Modelo de referência OSI
Computadores Tipos e estrutura interna
Programação Avançada Prof. Natalia Castro Fernandes
Especificação de Requisitos de Software - ERSw
Sistemas Distribuídos
Tópicos em redes e sistemas distribuídos Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Tópicos de Sistemas de Informação A
Sistemas Operacionais
Ritornello Um Framework para Representação de Conhecimento Musical
Professor: Márcio Amador
O que são, para que servem e onde podem ser utilizadas?
Sistemas Operacionais
Computação L1: Infra-Estrutura Básica
Sistemas Operacionais
© 2004 by Pearson Education Computadores: Ferramentas para a Era da Informação Tema 0 PARTE A.
SISTEMAS OPERACIONAIS I
Go3D! A 3D Graphics Engine Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37.
Sistemas operacionais
Processos.
Zeque - Grad. CC1 Sistemas Operacionais Curso de Ciência da Computação da UFPE Prof. José Queiroz - ZEQUE.
OMNeT++.
Análise e Projeto de Sistemas
Subsistema de Entrada e Saída do Kernel
Modelando aspectos de Implementação
Integração de Ferramentas CASE
Trabalhos de T.I.C..
OGRE 3D Open Source Graphics Engine Seminário Introdução à Multimídia.
Engenharia de Sistemas Embarcados Aula 5: Um Conjunto Básico de Ferramentas.
CloudSim Um framework para modelagem e simulação de infraestrutura e serviços de Computação em Nuvem.
Prof. Wallace Borges Cristo
UML (Unified Modeling Language) Linguagem Unificada de Modelagem
Prof. Sidney Galeote. 2 www. prasabermais. com  Visão Geral sobre a dimensão de qualidade “performance”  Custo da qualidade  Como a performance deve.
Sistemas Operacionais IV – Gerenciamento de E/S
TÉCNICAS DE ESTIMATIVAS
Soluções de Arquitetura para o MultiBatt Parte 0: Idéias gerais e problemas encontrados Parte I: Entidades e colaborações Parte II: Diagrama de relacionamento.
Fundamentos de Engenharia de SW Diagramas da UML Usados no Projeto de Software.
1 Especificação de Sistemas de Software e a UML. 2 Modelagem de sistema A modelagem de sistema auxilia o analista a entender a funcionalidade do sistema.
Sincronização Lip Sync Sincronização cursor-voz Entre outras mídias.
Engenharia de Sistemas (Lato Sensu) Victor Costa de Alemão Cisneiros Hudson Ramos Aracaju/SE COMPARAÇÃO ENTRE SERVIDORES WEB APACHE HTTP SERVER E NGINX.
Estruturas de Sistemas Operacionais. Componentes Comuns do Sistema Administração de Processos Administração da Memória Principal Administração do Armazenamento.
UNIVERSIDADE CATÓLICA DE PELOTAS CENTRO POLITÉCNICO CURSO DE CIÊNCIA DA COMPUTAÇÃO Redes de Computadores Ferramenta NTop (Network Traffic Probe) Explorador.
Bruna Cavallero Martins Universidade Católica de Pelotas.
Projeto Física Experimental II Por: Diego M. Pinho, Eduardo Damasceno, Hugo Hennies, Rafael M. Lopes.
Capítulo 4 Estrutura do Sistema Operacional
Redes de Computadores Técnico em Informática Prof. Alberto Felipe / Ester.
Transcrição da apresentação:

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

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

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

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)

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

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

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

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

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

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)

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

DirectX 9.0c API (pacotes) Direct3D DirectMusic DirectSound DirectPlay DirectInput DirectShow

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

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

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

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

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

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

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

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

Game Engine (motor ou framework)

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.

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!

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

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!

Trocando em miúdos...

Antes de mais nada, o laço principal!

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

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

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

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

Diagrama Gerenciador principal Gerenciador gráfico Editor de cenários Tela Editor de cenários Mouse Entrada Console Gerenciador principal

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.

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.

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

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.

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.

Gerenciador de Mensagens Gerencia as mensagens de Debug do motor e do jogo. Estas mensagens podem ser enviadas para: Console Arquivo Rede Impressora, ...

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

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.

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.

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;

Gerenciador de Objetos Detecção de colisão baseada em retângulos:

Colisão Vantagens Desvantagem Facilidade de implementação Velocidade de processamento Desvantagem A Corretude depende da forma do objeto

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

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

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.

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

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

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

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.

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.