SlideShare una empresa de Scribd logo
1 de 42
Programação de Jogos: visãogeralparainiciantes dacobrinhaaoBioshockem 50 min…  Fabio “Draco”Fonseca http://catavento.art.br
Disclaimer Estaapresentação é baseadanosmeusestudossobreprogramação de jogos. Qualquerdisparidade com autor X ou Y ou design Z ou W ou engine A ou B é porsuaconta e risco. Maselesvãotedizerque o game loop é o mesmo (bem, eumudei a ordem do game loop padrão...).
Meta Entender o Game Loop  Entender o que é e quaissãooscomponentes de uma game engine
VS.
Antes de começar, o quevocêprecisa saber? Programar Pode ser POO ouestruturada Física e Matemática Saber aquela do cursinhoajudahorrores… Google e Fóruns pontov.com.br, gamedev.net, box2d.net
Let’s begin the operation! 2D ou 3D, escolhendo o número de dimensões Qual o problema a ser resolvido e paraqualplataforma?  Simples e original vs. complexo e padrão Tiveumaidéia! Voufazer o Resident Evil 7! O número de dimensõesnãoimportadependendodatuaescolha.  Complexo e original Se Δt -> ∞ ...
Gentleman, start your engines Surge com Doom emmeados dos anos 90. Programado com relativaseparação entre sistemas de renderização, colisão, audio, arte, mapas e regras de jogo. Mods: a separaçãocriadapela ID permitiuque gamers individuais e pequenosgruposcriassemjogosbaseadosnaestrutura de Doom. Upgrade: Unreal, Quake III com linguagenspróprias de script. “Data-driven architecture”: Teoricamente a regra de jogo e a parte lógicaficariamseparadas dos outroselementos, permitindoqueváriosjogos do mesmoestilofossemfeitos a partirdamesmaplataforma. Masnãoháseparaçãoclaranem entre elementosnem entre o que é um jogo e o que é a engine. “Tudoacontecenaperiferia. Brigas, mortesnaperiferia” – Ratos de porão
Gentleman, start yourengines “Weshould reserve theterm “game engine” for software that is extensibleandcanbeused as thefoundation for manydifferente games without major modification” – Jason Gregory, Game Engine Design Architecture
What’sinside? Específico do jogo HUD, efeitos visuais Áudio e rede Gerenciador de física e animação de corpos Renderização e  gerenciador de cenas Inicialização e configuração Abstração do SO e SDKs específicas para cada sistema Hardware e SO.
Depois, as ferramentas O eterno debate sobrelinguagem de programação e sobrequal engine utilizar A melhor e maiseficientelinguagem de programação É aquelaquevocêmaissabe É aquelaqueresponde o problema “plataformaalvo + eficiênciacomputacional” Engine É aquelaquevocêmaissabe É aquelaquevaiteoferecermaiorsuporte e menor tempo de aprendizado – e estámaispróxima do game quevocê tem emmente É aquelaqueutiliza a linguagemquevocêmaissabe
20infinite loop Game loop ou jogos são ilusões É o laço onde todas as alterações do sistema que compõem um game, áudio, gráficos, física, etc., são atualizadas Como o cinema, os jogos também precisam de, pelo menos, 24 quadros por segundo para dar a ilusão de interatividade.
21infinite loop Exemplo: Pinta na tela o resultado final do frame atual while (g_renderManager->update())     { g_sceneManager->update(); entityManager->update(); psx->update(); 	   inputManager->update();     } Verifica se há eventos de cena: telas de game over, HUD, outros Faz update da animação e posição das entidades com os resultados do frame anterior. Resolve a física dos objetos, detecta colisão e atualiza valores das posições. Verifica input feito pelo jogador e deixa de prontidão outros blocos para o próximo frame.
22infinite loop Não reinvente a roda* Padrões de código Design Patterns Bibliotecas e suas APIs Game engines *Do menos abrangente para o mais abrangente
1 Visãogeral Game engine simples e seuscomponentes Porqueutilizar Precisarnãoprecisa, masajudabastante Dividir e conquistar Cadagerente no seuquadrado Estruturageral
Porqueutilizar Precisarnãoprecisa… ou um breveconto de Engenharia de software Custos: Time is money. Inclusive o seu tempo livre. Divisão de trabalho: componentesindependentessendoproduzidosemseparado; boas práticas. Sucesso: Você tem umaequipe, e agora!?  Foco no negócio.
Dividir e conquistar
Dividir e conquistar Uma game engine mínima Log
2 Desmembrando Porque um componente de log salvarátuavida Precisarnãoprecisa… Mesmo se for um sistema simples com assert e printfjá vale. Sofrimentopessoal: saída de std::cout no console deixava o sistemainativo. Melhorcuspirpara um arquivotexto. Bibliotecasprofissionais: Log4j, glog Cláusulas de throw / catch
3 Desmembrando Recursos, umacolheitafeliz Arquivos de configuração Áudio, imagens, grafos de cenas, modelos 3D, etc Tipos de arquivos XML, Binários, DX Studio
Tenhaseusarquivosestruturados de maneiraamigável Componente de recursos Responsávelpeloconsumootimizado de todososarquivosque a game engine utilizará.  Alimentação dos outroscomponentes. Emespecífico: Preenchegerenciador de cenas com seusgrafos (“desenho” das cenas). Conecta as entidades do game (personagens, cenário, etc) com suasrespectivasimagens e sons. Inicializa a física com as configuraçõesescolhidas Mapeiacontroles e teclaspara o funcionamento no jogo.
O que é… Scene Graph – Grafo de cena http://www.cs.berkeley.edu/~sequin/CS184/LECT_09/L7.html
4 Desmembrando Input devices, nãoperca o controle Troca de contextos O gerenciadordeve ser capaz de alterar o mapping dos controlesconformecontexto Polling / Listeners Pode-se checar o estado do controle a cada frame ouficarnaescuta de um evento. Independente do Hardware Abstração via bibliotecasouwrapping
Planejarpara o futuro Input devices, jáperdendo o controle WTF??????? MindControlHelmet
Vocabulárioimportante Essesdoismonstrossemprevoltam: Polling Listeners
5 Desmembrando Audio, 1, 2, 3, SOM. Semprerelegado, sempreumador de cabeçadepois. O problemadasincronia BGM vs. FX’s BGM: eventos e troca de contexto FX’s: listeners ou polling BASS audio
21infinite loop Exemplo: Pinta na tela o resultado final do frame atual while (g_renderManager->update())     { g_sceneManager->update(); entityManager->update(); psx->update(); 	   inputManager->update();     } E O SOM???? Verifica se há eventos de cena: telas de game over, HUD, outros Faz update da animação e posição das entidades com os resultados do frame anterior. Resolve a física dos objetos, detecta colisão e atualiza valores das posições. Verifica input feito pelo jogador e deixa de prontidão outros blocos para o próximo frame.
6 Desmembrando Renderização, o algoritmo do pintor No final do dia, é atualizar a tela com as informaçõesobtidasaté o momentoportodososoutrosgerenciadores. Algoritmo do pintor: resolvendo o problemadavisibilidade dos elementos 3D -> 2D; z-order. Bibliotecas: DirectX/OpenGL, Ogre3D, SDL, SFML.
O quemudou entre frames? Monstro do Polling atacanovamente Polling Checaosgerenciadores de cena e objetos Renderizanaordemencontrada no grafo de Cena, i.e. respeitando o algoritmo do Pintor.
Primeiramente o quevemprimeiro Algoritmo do Pintor e Z-order Objetos do fundosãodesenhadosprimeiramente. Ordem de profundidade é respeitada. Objetos com menorcoordenada Z sãodesenhadosprimeiros.  Háredundâncianasáreaspintadas, masproblemadavisibilidade é resolvido. O resultado final contémsomenteosobjetosobserváveis.
3D Microsoft Windows API was designed to provide software developers with direct access to low-level functions on PC peripherals - http://www.digitalhymnal.org/glossary_a-l.html#D The class library abstracts all the details of using the underlying system libraries like Direct3D and OpenGL and provides an interface based on world objects and other intuitive classes – ogre3d.org/about
2D Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer. - http://www.libsdl.org/ SFML is a free multimedia C++ API that provides you low and high level access to graphics, input, audio, etc.; SFML is a portable and easy to use multimedia API written in C++. You can see it as a modern, object-oriented alternative to SDL – sfml-dev.org/features.php
7 Desmembrando Cena, fazendouma Cadafase é umacenacompleta, e suaconfiguraçãogeral e relação entre oselementosque a compõemsãofeitosporarquivosexternos. Listeners paraeventos É umaponte entre o renderizador e o conjunto de elementos “vivos” (player e inimigos, porexemplo). Biblioteca: nãoconheço, mas Ogre3d e Cocos2d sãobaseadoemcenas.
Volta do grafo de cena Entendendo o porquê do arquivoexterno Pensenos designers Trabalhar com elementosconcretos é maisfácil do quetileset Mesmo um XML de configuração é maisfácil de se consumir do que um ASCII Se trabalhar com 3D, vaibateremgrafos de cena de umamaneiraououtra. É intuitivo (sort of…)
8 Desmembrando Entidades, tudo o quenão for cenárioousom Todosos sprites em um sólugar Ponte entre e o gerenciador de cena e o de física É ótimoterumafábrica de entidades (a design pattern Factory)
Criandobichos A design pattern factoryemjogos Listas de objetossãoutilizadasparateste de colisão e outroseventos. Se utilizarmosumaclasse base, é maisfácilmanipulá-los. Tudoqueestánatelapode ser umaentidade, masnemtudoqueestánatela é a MESMA entidade. Umafábrica de componentes resolve o problema.
9 Desmembrando Física, caindo de pau no Newton Na verdade, umabiblioteca de física é um motor de animação dos elementosnatela Nãocrieseusolver de física, mesmo se soubercomofazer um. Mesmo se for 2D, vale a penausarfísicanewtoniana “de verdade”. Nãotenhamedo. Bibliotecasprontas: Box2D, Havok, PhysX
EDOs, EDPs, Êita O problema das equaçõesdiferenciais genericscalartransportequation Ok, essa equação é para o movimento de um fluido, mas vale pra assustar.  A “classe” de equações utilizadas na programação de jogos é a mesma desta, e os problemas enfrentados na discretização também são os mesmos.
Bibliotecas Box2D
! Resumo O game loop Exemplo: Pinta na tela o resultado final do frame atual while (g_renderManager->update())     { g_sceneManager->update(); entityManager->update(); psx->update(); 	   inputManager->update();     } E O SOM E A IA E A REDE E ....???? Verifica se há eventos de cena: telas de game over, HUD, outros Faz update da animação e posição das entidades com os resultados do frame anterior. Resolve a física dos objetos, detecta colisão e atualiza valores das posições.
! Resumo A game engine Uma game engine mínima Log
! There is a lot more… O quefaltou Inteligência artificial Implementação, algoritmos e gerenciadores Rede Multiplayer online Gravação / acesso Engines / SDKs Númerosdemaisparamencionar Pesquiseconformenecessidade, hardware e plataforma(s) de interesse Estrutura de dados e algoritmos De listasaté Quad/Octress Apenasque … busquemconhecimento… Quemnão tem o Bilú, que use o Google
Referências Game Engines Game Engine Architecture, Jason Gregory Game Engine Design and Implementation, Alan Thorn Programação de jogos Games programming, Alan Thorn Beginning Game Programming,Hattan & Sikora Game Code Complete, Mike McShaffry www.gamedev.net Data Structures and Algorithms for game Developers, Alan Sherrod Design Patterns Head First Design Patterns,Freeman & Freeman Design Patterns,GoF Física www.box2d.org 3D Math Primer for Graphics and Game Development, Fletcher Dunn

Más contenido relacionado

La actualidad más candente

Apresentação lego mindstorms
Apresentação lego mindstormsApresentação lego mindstorms
Apresentação lego mindstormsCristina Conchinha
 
Introdução à Programação com Robôs Lego
Introdução à Programação com Robôs LegoIntrodução à Programação com Robôs Lego
Introdução à Programação com Robôs LegoRayner Pires
 
Criação de jogos game maker - férias
Criação de jogos   game maker - fériasCriação de jogos   game maker - férias
Criação de jogos game maker - fériasInstituto Inovar
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Flávio Ribeiro
 
Realidade aumentada com ia
Realidade aumentada com iaRealidade aumentada com ia
Realidade aumentada com iaAdriana Euzebio
 
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...INdT
 
INdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaINdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaHeitor Carlos
 
Capacitação nxt
Capacitação nxtCapacitação nxt
Capacitação nxtsanduel
 
Técnicas de Prototipação II - LEGO Aula 01
Técnicas de Prototipação II - LEGO Aula 01Técnicas de Prototipação II - LEGO Aula 01
Técnicas de Prototipação II - LEGO Aula 01Tiago Barros
 
Computador do Alípio
Computador do AlípioComputador do Alípio
Computador do Alípioteixeiraafm1
 

La actualidad más candente (14)

Apresentação lego mindstorms
Apresentação lego mindstormsApresentação lego mindstorms
Apresentação lego mindstorms
 
Crash course tradução
Crash course   traduçãoCrash course   tradução
Crash course tradução
 
Introdução à Programação com Robôs Lego
Introdução à Programação com Robôs LegoIntrodução à Programação com Robôs Lego
Introdução à Programação com Robôs Lego
 
Inteligência Artificial em Jogos
Inteligência Artificial em JogosInteligência Artificial em Jogos
Inteligência Artificial em Jogos
 
Criação de jogos game maker - férias
Criação de jogos   game maker - fériasCriação de jogos   game maker - férias
Criação de jogos game maker - férias
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6Implementação de Aplicações Móveis e Jogos com Python - Aula 6
Implementação de Aplicações Móveis e Jogos com Python - Aula 6
 
Realidade aumentada com ia
Realidade aumentada com iaRealidade aumentada com ia
Realidade aumentada com ia
 
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
Thiago Valle e Heitor Repolho - Utilizando sparta para para desenvolvimento d...
 
Curso Dia 02
Curso Dia 02Curso Dia 02
Curso Dia 02
 
INdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaINdT Mobile Labs - Sparta
INdT Mobile Labs - Sparta
 
Guia xna
Guia xnaGuia xna
Guia xna
 
Capacitação nxt
Capacitação nxtCapacitação nxt
Capacitação nxt
 
Técnicas de Prototipação II - LEGO Aula 01
Técnicas de Prototipação II - LEGO Aula 01Técnicas de Prototipação II - LEGO Aula 01
Técnicas de Prototipação II - LEGO Aula 01
 
Computador do Alípio
Computador do AlípioComputador do Alípio
Computador do Alípio
 

Destacado (12)

Fasesdedesarrollodeunprograma
FasesdedesarrollodeunprogramaFasesdedesarrollodeunprograma
Fasesdedesarrollodeunprograma
 
Relaxa, escuta e admira
Relaxa, escuta e admiraRelaxa, escuta e admira
Relaxa, escuta e admira
 
Diversidad lenguajes de progrmacion
Diversidad lenguajes de progrmacionDiversidad lenguajes de progrmacion
Diversidad lenguajes de progrmacion
 
Banana
BananaBanana
Banana
 
A arte de rua paulistana e as estrategias de marcas
A arte de rua paulistana e as estrategias de marcasA arte de rua paulistana e as estrategias de marcas
A arte de rua paulistana e as estrategias de marcas
 
Apresentação - Revista Botteco
Apresentação - Revista BottecoApresentação - Revista Botteco
Apresentação - Revista Botteco
 
Coração acolhedor
Coração acolhedorCoração acolhedor
Coração acolhedor
 
Examen corregido
Examen corregido Examen corregido
Examen corregido
 
Proibido2
 Proibido2 Proibido2
Proibido2
 
Manobraque salvavidas (1) (1
Manobraque salvavidas (1) (1Manobraque salvavidas (1) (1
Manobraque salvavidas (1) (1
 
Presentación 12
Presentación 12Presentación 12
Presentación 12
 
Luxury Villa Projects in Kozhikode
Luxury Villa Projects in KozhikodeLuxury Villa Projects in Kozhikode
Luxury Villa Projects in Kozhikode
 

Similar a Game programming

Palestra Introdução ao Game Design
Palestra Introdução ao Game DesignPalestra Introdução ao Game Design
Palestra Introdução ao Game DesignLeonardo Zamprogno
 
SP DevFest 2014 - Interfaces de Games para Diferentes Telas
SP DevFest 2014 - Interfaces de Games para Diferentes TelasSP DevFest 2014 - Interfaces de Games para Diferentes Telas
SP DevFest 2014 - Interfaces de Games para Diferentes TelasPedro Kayatt
 
Desenvolvimento de jogos para MSX
Desenvolvimento de jogos para MSXDesenvolvimento de jogos para MSX
Desenvolvimento de jogos para MSXGiovanni Nunes
 
Slide blender 3 d apresentação
Slide blender 3 d apresentaçãoSlide blender 3 d apresentação
Slide blender 3 d apresentaçãoJosé Nascimento
 
Júlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersJúlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersiMasters
 
Defesa TC V1.2.1
Defesa TC V1.2.1Defesa TC V1.2.1
Defesa TC V1.2.1B Bellaver
 
FLTK Summer Course - Part VIII - Eighth Impact
FLTK Summer Course - Part VIII - Eighth ImpactFLTK Summer Course - Part VIII - Eighth Impact
FLTK Summer Course - Part VIII - Eighth ImpactMichel Alves
 
ISD 2015 - Interfaces de Games para Diferentes Telas
ISD 2015 - Interfaces de Games para Diferentes TelasISD 2015 - Interfaces de Games para Diferentes Telas
ISD 2015 - Interfaces de Games para Diferentes TelasPedro Kayatt
 
Desenvolvimento De Jogos Na Plataforma Xna
Desenvolvimento De Jogos Na Plataforma XnaDesenvolvimento De Jogos Na Plataforma Xna
Desenvolvimento De Jogos Na Plataforma XnaEllison Leão
 
Comparação de sistemas operativos cliente
Comparação de sistemas operativos clienteComparação de sistemas operativos cliente
Comparação de sistemas operativos clienteAndré Dias
 
Frameworks Formais de Game Design.
Frameworks Formais de Game Design.Frameworks Formais de Game Design.
Frameworks Formais de Game Design.Pedro Emil Freme
 
Palestra - Introdução ao desenvolvimento de Jogos
Palestra - Introdução ao desenvolvimento de JogosPalestra - Introdução ao desenvolvimento de Jogos
Palestra - Introdução ao desenvolvimento de Jogosjuliocoopergames
 
Quasi-engine: Desenvolvendo jogos em QML
Quasi-engine: Desenvolvendo jogos em QMLQuasi-engine: Desenvolvendo jogos em QML
Quasi-engine: Desenvolvendo jogos em QMLAnderson Briglia
 
Programação de jogos eletrônicos
Programação de jogos eletrônicosProgramação de jogos eletrônicos
Programação de jogos eletrônicosguest8ff100
 
Palestra Game Design
Palestra Game DesignPalestra Game Design
Palestra Game Designvincevader
 

Similar a Game programming (20)

Palestra Introdução ao Game Design
Palestra Introdução ao Game DesignPalestra Introdução ao Game Design
Palestra Introdução ao Game Design
 
SP DevFest 2014 - Interfaces de Games para Diferentes Telas
SP DevFest 2014 - Interfaces de Games para Diferentes TelasSP DevFest 2014 - Interfaces de Games para Diferentes Telas
SP DevFest 2014 - Interfaces de Games para Diferentes Telas
 
Desenvolvimento de jogos para MSX
Desenvolvimento de jogos para MSXDesenvolvimento de jogos para MSX
Desenvolvimento de jogos para MSX
 
Slide blender 3 d apresentação
Slide blender 3 d apresentaçãoSlide blender 3 d apresentação
Slide blender 3 d apresentação
 
Júlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game DevelopersJúlio Pescuite - Advanced Topics for Game Developers
Júlio Pescuite - Advanced Topics for Game Developers
 
Defesa TC V1.2.1
Defesa TC V1.2.1Defesa TC V1.2.1
Defesa TC V1.2.1
 
FLTK Summer Course - Part VIII - Eighth Impact
FLTK Summer Course - Part VIII - Eighth ImpactFLTK Summer Course - Part VIII - Eighth Impact
FLTK Summer Course - Part VIII - Eighth Impact
 
Curso Unity3D
Curso Unity3DCurso Unity3D
Curso Unity3D
 
ISD 2015 - Interfaces de Games para Diferentes Telas
ISD 2015 - Interfaces de Games para Diferentes TelasISD 2015 - Interfaces de Games para Diferentes Telas
ISD 2015 - Interfaces de Games para Diferentes Telas
 
Comparativo entre Engines de Jogos em 3d
Comparativo entre Engines de Jogos em 3dComparativo entre Engines de Jogos em 3d
Comparativo entre Engines de Jogos em 3d
 
Desenvolvimento De Jogos Na Plataforma Xna
Desenvolvimento De Jogos Na Plataforma XnaDesenvolvimento De Jogos Na Plataforma Xna
Desenvolvimento De Jogos Na Plataforma Xna
 
Comparação de sistemas operativos cliente
Comparação de sistemas operativos clienteComparação de sistemas operativos cliente
Comparação de sistemas operativos cliente
 
Frameworks Formais de Game Design.
Frameworks Formais de Game Design.Frameworks Formais de Game Design.
Frameworks Formais de Game Design.
 
Cp game design
Cp game designCp game design
Cp game design
 
Palestra - Introdução ao desenvolvimento de Jogos
Palestra - Introdução ao desenvolvimento de JogosPalestra - Introdução ao desenvolvimento de Jogos
Palestra - Introdução ao desenvolvimento de Jogos
 
Quasi-engine: Desenvolvendo jogos em QML
Quasi-engine: Desenvolvendo jogos em QMLQuasi-engine: Desenvolvendo jogos em QML
Quasi-engine: Desenvolvendo jogos em QML
 
Blender 3 D
Blender 3 DBlender 3 D
Blender 3 D
 
Programação de jogos eletrônicos
Programação de jogos eletrônicosProgramação de jogos eletrônicos
Programação de jogos eletrônicos
 
Palestra Game Design
Palestra Game DesignPalestra Game Design
Palestra Game Design
 
Historia do videogame
Historia do videogameHistoria do videogame
Historia do videogame
 

Game programming

  • 1. Programação de Jogos: visãogeralparainiciantes dacobrinhaaoBioshockem 50 min… Fabio “Draco”Fonseca http://catavento.art.br
  • 2. Disclaimer Estaapresentação é baseadanosmeusestudossobreprogramação de jogos. Qualquerdisparidade com autor X ou Y ou design Z ou W ou engine A ou B é porsuaconta e risco. Maselesvãotedizerque o game loop é o mesmo (bem, eumudei a ordem do game loop padrão...).
  • 3. Meta Entender o Game Loop Entender o que é e quaissãooscomponentes de uma game engine
  • 4. VS.
  • 5. Antes de começar, o quevocêprecisa saber? Programar Pode ser POO ouestruturada Física e Matemática Saber aquela do cursinhoajudahorrores… Google e Fóruns pontov.com.br, gamedev.net, box2d.net
  • 6. Let’s begin the operation! 2D ou 3D, escolhendo o número de dimensões Qual o problema a ser resolvido e paraqualplataforma? Simples e original vs. complexo e padrão Tiveumaidéia! Voufazer o Resident Evil 7! O número de dimensõesnãoimportadependendodatuaescolha. Complexo e original Se Δt -> ∞ ...
  • 7. Gentleman, start your engines Surge com Doom emmeados dos anos 90. Programado com relativaseparação entre sistemas de renderização, colisão, audio, arte, mapas e regras de jogo. Mods: a separaçãocriadapela ID permitiuque gamers individuais e pequenosgruposcriassemjogosbaseadosnaestrutura de Doom. Upgrade: Unreal, Quake III com linguagenspróprias de script. “Data-driven architecture”: Teoricamente a regra de jogo e a parte lógicaficariamseparadas dos outroselementos, permitindoqueváriosjogos do mesmoestilofossemfeitos a partirdamesmaplataforma. Masnãoháseparaçãoclaranem entre elementosnem entre o que é um jogo e o que é a engine. “Tudoacontecenaperiferia. Brigas, mortesnaperiferia” – Ratos de porão
  • 8. Gentleman, start yourengines “Weshould reserve theterm “game engine” for software that is extensibleandcanbeused as thefoundation for manydifferente games without major modification” – Jason Gregory, Game Engine Design Architecture
  • 9. What’sinside? Específico do jogo HUD, efeitos visuais Áudio e rede Gerenciador de física e animação de corpos Renderização e gerenciador de cenas Inicialização e configuração Abstração do SO e SDKs específicas para cada sistema Hardware e SO.
  • 10. Depois, as ferramentas O eterno debate sobrelinguagem de programação e sobrequal engine utilizar A melhor e maiseficientelinguagem de programação É aquelaquevocêmaissabe É aquelaqueresponde o problema “plataformaalvo + eficiênciacomputacional” Engine É aquelaquevocêmaissabe É aquelaquevaiteoferecermaiorsuporte e menor tempo de aprendizado – e estámaispróxima do game quevocê tem emmente É aquelaqueutiliza a linguagemquevocêmaissabe
  • 11. 20infinite loop Game loop ou jogos são ilusões É o laço onde todas as alterações do sistema que compõem um game, áudio, gráficos, física, etc., são atualizadas Como o cinema, os jogos também precisam de, pelo menos, 24 quadros por segundo para dar a ilusão de interatividade.
  • 12. 21infinite loop Exemplo: Pinta na tela o resultado final do frame atual while (g_renderManager->update()) { g_sceneManager->update(); entityManager->update(); psx->update(); inputManager->update(); } Verifica se há eventos de cena: telas de game over, HUD, outros Faz update da animação e posição das entidades com os resultados do frame anterior. Resolve a física dos objetos, detecta colisão e atualiza valores das posições. Verifica input feito pelo jogador e deixa de prontidão outros blocos para o próximo frame.
  • 13. 22infinite loop Não reinvente a roda* Padrões de código Design Patterns Bibliotecas e suas APIs Game engines *Do menos abrangente para o mais abrangente
  • 14. 1 Visãogeral Game engine simples e seuscomponentes Porqueutilizar Precisarnãoprecisa, masajudabastante Dividir e conquistar Cadagerente no seuquadrado Estruturageral
  • 15. Porqueutilizar Precisarnãoprecisa… ou um breveconto de Engenharia de software Custos: Time is money. Inclusive o seu tempo livre. Divisão de trabalho: componentesindependentessendoproduzidosemseparado; boas práticas. Sucesso: Você tem umaequipe, e agora!? Foco no negócio.
  • 17. Dividir e conquistar Uma game engine mínima Log
  • 18. 2 Desmembrando Porque um componente de log salvarátuavida Precisarnãoprecisa… Mesmo se for um sistema simples com assert e printfjá vale. Sofrimentopessoal: saída de std::cout no console deixava o sistemainativo. Melhorcuspirpara um arquivotexto. Bibliotecasprofissionais: Log4j, glog Cláusulas de throw / catch
  • 19. 3 Desmembrando Recursos, umacolheitafeliz Arquivos de configuração Áudio, imagens, grafos de cenas, modelos 3D, etc Tipos de arquivos XML, Binários, DX Studio
  • 20. Tenhaseusarquivosestruturados de maneiraamigável Componente de recursos Responsávelpeloconsumootimizado de todososarquivosque a game engine utilizará. Alimentação dos outroscomponentes. Emespecífico: Preenchegerenciador de cenas com seusgrafos (“desenho” das cenas). Conecta as entidades do game (personagens, cenário, etc) com suasrespectivasimagens e sons. Inicializa a física com as configuraçõesescolhidas Mapeiacontroles e teclaspara o funcionamento no jogo.
  • 21. O que é… Scene Graph – Grafo de cena http://www.cs.berkeley.edu/~sequin/CS184/LECT_09/L7.html
  • 22. 4 Desmembrando Input devices, nãoperca o controle Troca de contextos O gerenciadordeve ser capaz de alterar o mapping dos controlesconformecontexto Polling / Listeners Pode-se checar o estado do controle a cada frame ouficarnaescuta de um evento. Independente do Hardware Abstração via bibliotecasouwrapping
  • 23. Planejarpara o futuro Input devices, jáperdendo o controle WTF??????? MindControlHelmet
  • 25. 5 Desmembrando Audio, 1, 2, 3, SOM. Semprerelegado, sempreumador de cabeçadepois. O problemadasincronia BGM vs. FX’s BGM: eventos e troca de contexto FX’s: listeners ou polling BASS audio
  • 26. 21infinite loop Exemplo: Pinta na tela o resultado final do frame atual while (g_renderManager->update()) { g_sceneManager->update(); entityManager->update(); psx->update(); inputManager->update(); } E O SOM???? Verifica se há eventos de cena: telas de game over, HUD, outros Faz update da animação e posição das entidades com os resultados do frame anterior. Resolve a física dos objetos, detecta colisão e atualiza valores das posições. Verifica input feito pelo jogador e deixa de prontidão outros blocos para o próximo frame.
  • 27. 6 Desmembrando Renderização, o algoritmo do pintor No final do dia, é atualizar a tela com as informaçõesobtidasaté o momentoportodososoutrosgerenciadores. Algoritmo do pintor: resolvendo o problemadavisibilidade dos elementos 3D -> 2D; z-order. Bibliotecas: DirectX/OpenGL, Ogre3D, SDL, SFML.
  • 28. O quemudou entre frames? Monstro do Polling atacanovamente Polling Checaosgerenciadores de cena e objetos Renderizanaordemencontrada no grafo de Cena, i.e. respeitando o algoritmo do Pintor.
  • 29. Primeiramente o quevemprimeiro Algoritmo do Pintor e Z-order Objetos do fundosãodesenhadosprimeiramente. Ordem de profundidade é respeitada. Objetos com menorcoordenada Z sãodesenhadosprimeiros. Háredundâncianasáreaspintadas, masproblemadavisibilidade é resolvido. O resultado final contémsomenteosobjetosobserváveis.
  • 30. 3D Microsoft Windows API was designed to provide software developers with direct access to low-level functions on PC peripherals - http://www.digitalhymnal.org/glossary_a-l.html#D The class library abstracts all the details of using the underlying system libraries like Direct3D and OpenGL and provides an interface based on world objects and other intuitive classes – ogre3d.org/about
  • 31. 2D Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer. - http://www.libsdl.org/ SFML is a free multimedia C++ API that provides you low and high level access to graphics, input, audio, etc.; SFML is a portable and easy to use multimedia API written in C++. You can see it as a modern, object-oriented alternative to SDL – sfml-dev.org/features.php
  • 32. 7 Desmembrando Cena, fazendouma Cadafase é umacenacompleta, e suaconfiguraçãogeral e relação entre oselementosque a compõemsãofeitosporarquivosexternos. Listeners paraeventos É umaponte entre o renderizador e o conjunto de elementos “vivos” (player e inimigos, porexemplo). Biblioteca: nãoconheço, mas Ogre3d e Cocos2d sãobaseadoemcenas.
  • 33. Volta do grafo de cena Entendendo o porquê do arquivoexterno Pensenos designers Trabalhar com elementosconcretos é maisfácil do quetileset Mesmo um XML de configuração é maisfácil de se consumir do que um ASCII Se trabalhar com 3D, vaibateremgrafos de cena de umamaneiraououtra. É intuitivo (sort of…)
  • 34. 8 Desmembrando Entidades, tudo o quenão for cenárioousom Todosos sprites em um sólugar Ponte entre e o gerenciador de cena e o de física É ótimoterumafábrica de entidades (a design pattern Factory)
  • 35. Criandobichos A design pattern factoryemjogos Listas de objetossãoutilizadasparateste de colisão e outroseventos. Se utilizarmosumaclasse base, é maisfácilmanipulá-los. Tudoqueestánatelapode ser umaentidade, masnemtudoqueestánatela é a MESMA entidade. Umafábrica de componentes resolve o problema.
  • 36. 9 Desmembrando Física, caindo de pau no Newton Na verdade, umabiblioteca de física é um motor de animação dos elementosnatela Nãocrieseusolver de física, mesmo se soubercomofazer um. Mesmo se for 2D, vale a penausarfísicanewtoniana “de verdade”. Nãotenhamedo. Bibliotecasprontas: Box2D, Havok, PhysX
  • 37. EDOs, EDPs, Êita O problema das equaçõesdiferenciais genericscalartransportequation Ok, essa equação é para o movimento de um fluido, mas vale pra assustar. A “classe” de equações utilizadas na programação de jogos é a mesma desta, e os problemas enfrentados na discretização também são os mesmos.
  • 39. ! Resumo O game loop Exemplo: Pinta na tela o resultado final do frame atual while (g_renderManager->update()) { g_sceneManager->update(); entityManager->update(); psx->update(); inputManager->update(); } E O SOM E A IA E A REDE E ....???? Verifica se há eventos de cena: telas de game over, HUD, outros Faz update da animação e posição das entidades com os resultados do frame anterior. Resolve a física dos objetos, detecta colisão e atualiza valores das posições.
  • 40. ! Resumo A game engine Uma game engine mínima Log
  • 41. ! There is a lot more… O quefaltou Inteligência artificial Implementação, algoritmos e gerenciadores Rede Multiplayer online Gravação / acesso Engines / SDKs Númerosdemaisparamencionar Pesquiseconformenecessidade, hardware e plataforma(s) de interesse Estrutura de dados e algoritmos De listasaté Quad/Octress Apenasque … busquemconhecimento… Quemnão tem o Bilú, que use o Google
  • 42. Referências Game Engines Game Engine Architecture, Jason Gregory Game Engine Design and Implementation, Alan Thorn Programação de jogos Games programming, Alan Thorn Beginning Game Programming,Hattan & Sikora Game Code Complete, Mike McShaffry www.gamedev.net Data Structures and Algorithms for game Developers, Alan Sherrod Design Patterns Head First Design Patterns,Freeman & Freeman Design Patterns,GoF Física www.box2d.org 3D Math Primer for Graphics and Game Development, Fletcher Dunn

Notas del editor

  1. Most managers plow through the act of management with few guidelines other than gut or habit on what works best. Luckily there is a large body of well researched material out there on what works. Not all of it agrees. However, there are some obviously broken concepts such as overtime that should be put to rest. And there are some practical ideas like small team sizes that offer a big boost for relatively little effort.
  2. The numbers vary slightly here. Some studies claim teams of 3 are good. Others say 9 isn’t so bad. But in general 4 to 8 seems to work well.