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

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

JMonkeyEngine e Arquitetura de Engines

Apresentações semelhantes


Apresentação em tema: "JMonkeyEngine e Arquitetura de Engines"— Transcrição da apresentação:

1 JMonkeyEngine e Arquitetura de Engines
Erick Baptista Passos

2 Roteiro Introdução: Scene graph JMonkeyEngine Arquitetura de Engines
Hello Game Tutorial Arquitetura de Engines GameObjects Data-Driven Components

3 Aviso Conteúdo voltado a programadores.
O objetivo da aula de hoje é mostrar os padrões de projeto usados para criar engines de jogos Diferenciação entre bibliotecas, frameworks e engines Ao final os alunos saberão como criar e manter um framework (ou até uma engine) para seus jogos usando o paradigma orientado a objetos Em última instância, serão feitas comparações visando mostrar onde esses padrões são aplicados em engines específicas grandes como: Unreal, CryEngine, GameStudio, Torque, entre outras

4 Disambiguation Biblioteca Framework
Conjunto de classes, funções para auxiliar a resolver problemas comuns Seu código instancia, invoca, chama... Framework Esqueleto de aplicação pronto para ter a lógica de negócio implementada e acoplada Seu código implementa ganchos (hooks, callbacks) que são instanciados, invocados, chamados pelo framework

5 Disambiguation Engine
Conjunto de bibliotecas e frameworks para tarefas comuns em desenvolvimentos de jogos como: gráficos, física, rede, IA, integrados em um ambiente de desenvolvimento produtivo Inclui ferramentas visuais para manipulação das cenas (fases) do jogo e seus GameObjects (será explicado em detalhes) Normalmente são específicas para um gênero! Discussão

6 Scene graph Estrutura de dados que organiza uma cena 3D hierarquicamente Nós podem ser: Geometrias simples ou modelos 3D Um nó de agrupamento Nós têm atributos que se propagam pelo grafo Posicionamento, rotação e escala Atributos sobre iluminação Outros atributos da máquina de estados OpenGL Normalmente de um nó para seus filhos

7 Scene graph Raiz Terreno Casa Personagem HUD Life Points Exemplo:

8 Scene graph Exemplo (luz): Raiz Terreno (Luz) Casa HUD Life Points
Personagem HUD Life Points Exemplo (luz):

9 Scene graph Porque um scene graph não é uma árvore?
Podem existir nós (folhas ou não) com mais de um “pai” Um exemplo são geometrias compartilhadas para aceleração

10 JMonkeyEngine Framework pra jogos escrito em Java
É a mais completa e mais rápida engine em Java atualmente, além de ter uma comunidade extremamente ativa Na pior das hipótese é uma ótima plataforma para se aprender desenvolvimento de engines Apoiada por diversas empresas SUN, NCSoft, JadeStone, Three Rings

11 JMonkeyEngine Scene graph Completamente OO Usa OpenGL nativo
Abstrai o desenvolvedor de lidar com a maioria das operações de baixo nível

12 JMonkeyEngine

13 JMonkeyEngine

14 JMonkeyEngine

15 JMonkeyEngine

16 Arquitetura de um jogo (básica)
Todo jogo é uma simulação controlada por um loop infinito semelhante ao seguinte: Checagem por controles Teclado, mouse, joystick Atualização da cena Reposicionamento de nós Atualização de audio Atualização dos agentes de IA Desenho da cena na tela Percorrer o scene graph e desenhar todos os objetos visíveis

17 Arquitetura de um jogo JMonkeyEngine traz essas funcionalidades de forma flexível e customizável Game loop Checagem por controles Um scene graph Montagem de um scene graph e as regras de negócio do jogo O nosso exemplo irá explorar incrementalmente essa abordagem

18 Hello Game Exemplo mínimo que usa uma classe Básica que representa um jogo: SimpleGame Adiciona apenas uma caixa 3D à cena A versão baseada em StandardGame é a forma mais apropriada de se desenvolver um jogo GameStates representam sub-cenas ou mesmo níveis diferentes do jogo

19 Hello StandardGame Separa o loop principal do jogo (StandardGame) das diferentes cenas que podem compor este último (gameStates). A idéia é que criemos GameStates para a cena principal, outro para um µmenu, outro para o menu de pausa, etc. No jogo Dirty Racers foram usados 7 diferentes GameStates Menu, InGameMenu, TrackChooser, CarChooser, Racing, Loading e Creditos

20 Tutorial Lições abordando o desenvolvimento do jogo de forma incremental Cena básica com um terreno e iluminação Personagem do jogo com animação importado de uma ferramenta de modelagem 3D Personagem que atira balas explosivas Incluindo barris para serem destruídos

21 Post Mortem O que está errado com o tutorial?
Apesar de ser bem simples e usar as classes disponíveis para organizar a cena, não existe uma taxonomia que permita abstrair o que compõe um jogo genérico Precisamos abstrair o processo de criação de jogos em uma arquitetura mais flexível que se adeque a mais de um jogo Engenheiros são lentos (voltaremos a isso)

22 Arquitetura de uma Engine
Os principais conceitos ligados a jogos em geral são: Jogo Cenário Personagens Demais objetos (estáticos e dinâmicos) Comportamento ligado a certos objetos e/ou eventos Término da partida/nível HUD e menus intermediários (interface)

23 Arquitetura de uma Engine
Uma forma de agrupar esses conceitos de forma ainda mais geral seria: Game Meu jogo GameObjects Cenário Personagens Demais objetos (estáticos e dinâmicos) HUD e menus intermediários (interface) Callbacks discretos Comportamento ligado a certos objetos e/ou eventos Término da partida/nível

24 Arquitetura de uma Engine
A chave para a arquitetura de um jogo é o paradigma da orientação a objetos Poucos domínios são tão facilmente mapeados para um paradigma GameObject Representa qualquer entidade estática ou dinâmica em jogos Classe abstrata (ou concreta quando baseada em componentes) Possui atributos como geometria, posicão, etc. Também inclui o comportamento daquele objeto Subclasses especificam tipos diferentes de objetos como NPCs, player, objetos estáticos

25 Arquitetura de uma Engine
GameObject DynamicObject Character Player NPC Boat StaticObject TrigerObject

26 Arquitetura de uma Engine

27 Arquitetura de uma engine
O trabalho do programador agora se resume a criar classes que representam os tipos especiais de GameObjects do seu jogo Compor os níveis consiste em definir que objetos devem ser instanciados e seus atributos Um exemplo de implementação...

28 Post mortem Qual o problema dos game objects?
Estrutura rígida de herança Game design prevê muitas mudanças no comportamento e estrutura dos jogos Engenheiros são lentos Apenas permitir que se especifique o comportamento em linguagens de script é pouco É preciso abstrair não só os atributos e comportamento, mas também a estrutura dos GameObjects Tratar dados como dados, o resto não importa...

29 Post mortem Existem várias maneiras de decompor os GameObjects em uma estrutura de herança Estão TODOS errados Obviamente não INICIAM errados Jogos mudam constantemente Designer decidem independentemente das estruturas de tipos dos engenheiros Eles VÃO pedir coisas que atravessam as amarras da hierarquia

30 Re-examinando o problema
Isto é um banco de dados (um problema muito bem entendido) “The data is important, nothing else matters” …mas continuamos hard-coding everything Para lidar com mudanças de design, não adianta criar uma ferramenta para alterar propriedades apenas (editor), e sim uma que permita COMPOR a estrutura desses GameObjects

31 Solução: Component System
Cada componente é um peça auto-cotida de lógica de jogo Modelo, física, inventário, arma, terreno, textura, shader Encaixe componentes para montar um GameObject Especificação dessa montagem deve ser data- driven XML, script, etc… Manipulável no editor

32 Uma arquitetura melhor...

33 Uma arquitetura melhor...

34 Uma arquitetura melhor...

35 Considerações finais Basicamente TODAS as engines comerciais são baseadas em uma dessas duas estruturas ou uma mescla de ambas GameStudio – GameObjects Torque e Unreal – mescla mais próxima de GameObjects Cryengine e DS (Dungeon Siege) – Component system Os editores de nível nos permitem manipular os atributos e estrutura (quando existente), que são mantidos persistentes através de script, XML (cryengine), entre outras formas

36 Considerações finais Isso foi apenas uma amostra MUITO pequena das funcionalidades da JMonkeyEngine e de como se organiza uma engine Assuntos não explorados mas que podem ser discutidos depois: Dependência entre objetos e componentes Criação de editores de nível Content pipeline Aplicação dessas técnicas com Actionscript 3.0 (flash), XNA ou Ogre3D, entre outras ferramentas

37 Considerações finais Mais informações em: www.jmonkeyengine.com
Revista Mundo Java edição 24 Página 30 Game Programming Gems 6, artigo Game Object Component System - meu blog


Carregar ppt "JMonkeyEngine e Arquitetura de Engines"

Apresentações semelhantes


Anúncios Google