JMonkeyEngine e Arquitetura de Engines

Slides:



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

Análise e Projeto Orientado a Objetos
Vicente Vieira Filho Orientadora: Patrícia Tedesco
Engenharia de Software
Rational Unified Process
Resumo 1.1) Introdução 1.2) Abordagem Convencional de Arquivos
SISTEMAS DE INFORMAÇÃO
Engenharia de Software
Orientação por Objectos > Modelo de Processo OO > Identificação de Classe e Objectos Aula 12.
UML – MODELAÇÃO DA ESTRUTURA Professor Sandro Carvalho.
Um Processo Baseado em MDA para a Especialização de Mecanismos de Persistência Fabio Seixas Marques Seminário LES – 7 de abril de.
Modelagem Orientada a Objetos
UML Diagrama de Classes elementos básicos. Contexto Os diagramas de classes fazem parte do da visão estática da UML. Os elemento desta visão são conceitos.
Mapeamento Objeto Relacional
SISTEMA É UMA ENTIDADE QUE MANTEM SUA EXISTÊNCIA ATRAVÉS DA INTERAÇÃO DE SUAS PARTES ( Bertalanffy ) Interação Mútua Diferente duma simples.
RV: Objetos e Implementação Prof. Dr. Annibal Hetem Jr.
Introdução ao paradigma de programação: Orientado a Objetos
Introdução a diagrama de classes e UML
Diagrama de Classes.
Programação Orientada a Objetos
MedEl: Uma solução de E-Learning utilizando tecnologia Microsoft ASP
Aspectos Avançados em Engenharia de Software Aula 3 Fernanda Campos
Gerencia de Projeto OO Aspectos Avançados em Engenharia de Software Aula 5 Fernanda Campos DCC/UFJF.
Introdução a Programação Orientada a Objetos
Marcelo Korjenioski. Venda crescente de dispositivos com sistema operacional Android em 2011 favorecem o desenvolvimento para a plataforma. Jogos casuais.
Aula 1 Minicurso: Astah Ministrantes: André Martins; Camila Brondani;
Princípios de Orientação à Objetos
Gerenciamento de Configuração
Padrões de projeto detalhados Factory Method, Abstract Factory
Rodrigo Cristiano Silva
Introdução ao Framework Django
Game Engines.
Métodos de Construção de Software: Orientação a Objetos
Prof. Kelly E. Medeiros Bacharel em Sistemas de Informação
Prototipagem rápida de gameplay
REVISÃO.
Professor: Márcio Amador
Orientação a Objetos Parte I
Programação Orientada a Objetos - Java
Prof. Silvestri – todos os direitos reservados SISTEMAS DISTRIBUIDOS Aula 5 Eduardo Silvestri
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa Classes e Objetos em Java.
SISTEMAS DISTRIBUIDOS Aula 4
Arquitetura de Desenvolvimento Web MVC vs. Three Tiers
A abordagem de banco de dados para gerenciamento de dados
Bem Vindos!!! Minicurso Unity 3D. Time is like a fuse, short and burning fast… Time is like a fuse, short and burning fast…
Processos de Software.
Desenvolvimento de Software Dirigido a Modelos
UML e a Ferramenta Astah
LINQ e Entity Framework
Introdução a Programação Orientada a Objetos
Objetos Distribuídos Frameworks Orientados a Objetos.
CloudSim Um framework para modelagem e simulação de infraestrutura e serviços de Computação em Nuvem.
Análise e Projeto de Sistemas
Aplicação - Plataforma de Autoria - Natan. Resumo - Entendimento Ferramenta para desenvolvimento de conteúdo para tv digital, baseada em componentes e.
Módulo II Capítulo 1: Orientação a Objetos
UML (Unified Modeling Language) Linguagem Unificada de Modelagem
UML (Unified Modeling Language) Linguagem Unificada de Modelagem
PADROES DE PROJETO PROF. OSIEL MARLON. PADRÕES DE PROJETO INTRODUÇÃO Padrões de projeto têm emergido como uma das mais promissoras abordagens para a melhoria.
IF 718 Análise e Projeto de Sistemas Augusto Sampaio Vitor Braga (Estágio docência) Camila Sá (Monitora) Parte do material cedido pela Qualiti Software.
Desenvolvimento WEB II Ajax – Utilização de Frameworks Javascript Professora: Kelly de Paula Cunha.
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.
CIn-UFPE1 Projeto de Gerenciamento de Dados. CIn-UFPE2 Objetivos n Definir o que significa gerenciamento de dados do sistema; n Entender abordagens diferentes.
Unity3D: Organização de Projetos
Delegação  É uma maneira de tornar a composição tão poderosa para fins de reutilização como a herança. Na delegação, dois objetos são envolvidos no tratamento.
ALUNO: RONI FABIO BANASZEWSKI Model-View-Controller.
1.
Testes de Unidade. 2 Pauta Testes de Unidade; Testes de Unidade; Desenvolvimento orientado a testes; Desenvolvimento orientado a testes; Testes unitários.
JFC e Swing Thiago Medeiros Barros 18/08/2011. JFC Java Foundation Classes é um conjunto de componentes e serviços que simplificam o desenvolvimento e.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Arquitetura de Engines
Transcrição da apresentação:

JMonkeyEngine e Arquitetura de Engines Erick Baptista Passos erickpassos@gmail.com

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

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

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

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

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

Scene graph Raiz Terreno Casa Personagem HUD Life Points Exemplo:

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

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

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

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

JMonkeyEngine

JMonkeyEngine

JMonkeyEngine

JMonkeyEngine

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

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

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

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

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

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)

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)

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

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

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

Arquitetura de uma Engine

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

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

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

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

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

Uma arquitetura melhor...

Uma arquitetura melhor...

Uma arquitetura melhor...

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

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

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 http://Sertao3d.blogspot.com - meu blog