SlideShare uma empresa Scribd logo
1 de 43
Programação de Jogos: visãogeralparainiciantes dacobrinhaaoBioshockem 50 min…  Fabio Fonseca – 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 é baseadoemcenas.
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…)
Entendi! Mas o quedeveconter? Deveconversar com o gerenciador de recursos e levarumacena e suasrelaçõespara a memória Conter um gerenciador de eventos, onde, a cada frame, seráchecado se devomudar de cena, entrarem um menu, etc Transformaçõesdaprópriacena: rotação, câmera, iluminação. Ponteiropara as entidades… próximo slide
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 O AI 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

Mais conteúdo relacionado

Mais procurados

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
 
Apostila do game maker 8.0 (português)
Apostila do game maker 8.0 (português)Apostila do game maker 8.0 (português)
Apostila do game maker 8.0 (português)Rafyusq Queiroz
 
Apresentação lego mindstorms
Apresentação lego mindstormsApresentação lego mindstorms
Apresentação lego mindstormsCristina Conchinha
 
Capacitação nxt
Capacitação nxtCapacitação nxt
Capacitação nxtsanduel
 
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
 
Técnicas de Prototipação II - LEGO Aula 04
Técnicas de Prototipação II - LEGO Aula 04Técnicas de Prototipação II - LEGO Aula 04
Técnicas de Prototipação II - LEGO Aula 04Tiago Barros
 
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
 
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
 
Amostra robos lego
Amostra robos legoAmostra robos lego
Amostra robos legoArtur (Ft)
 
INdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaINdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaHeitor Carlos
 
Algoritmos de jogos
Algoritmos de jogosAlgoritmos de jogos
Algoritmos de jogosiaudesc
 
Painel de Controle Windows XP
Painel de Controle Windows XPPainel de Controle Windows XP
Painel de Controle Windows XPRicardo de Moraes
 

Mais procurados (20)

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
 
Apostila do game maker 8.0 (português)
Apostila do game maker 8.0 (português)Apostila do game maker 8.0 (português)
Apostila do game maker 8.0 (português)
 
Apresentação lego mindstorms
Apresentação lego mindstormsApresentação lego mindstorms
Apresentação lego mindstorms
 
Game AI
Game AIGame AI
Game AI
 
Capacitação nxt
Capacitação nxtCapacitação nxt
Capacitação nxt
 
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
 
Inteligência Artificial em Jogos
Inteligência Artificial em JogosInteligência Artificial em Jogos
Inteligência Artificial em Jogos
 
Técnicas de Prototipação II - LEGO Aula 04
Técnicas de Prototipação II - LEGO Aula 04Técnicas de Prototipação II - LEGO Aula 04
Técnicas de Prototipação II - LEGO Aula 04
 
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
 
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...
 
Amostra robos lego
Amostra robos legoAmostra robos lego
Amostra robos lego
 
Computação gráfica
Computação gráficaComputação gráfica
Computação gráfica
 
INdT Mobile Labs - Sparta
INdT Mobile Labs - SpartaINdT Mobile Labs - Sparta
INdT Mobile Labs - Sparta
 
Idez
IdezIdez
Idez
 
Curso Dia 02
Curso Dia 02Curso Dia 02
Curso Dia 02
 
Lego Mindstorms.
Lego Mindstorms. Lego Mindstorms.
Lego Mindstorms.
 
GRAFICA
GRAFICAGRAFICA
GRAFICA
 
Algoritmos de jogos
Algoritmos de jogosAlgoritmos de jogos
Algoritmos de jogos
 
Painel de Controle Windows XP
Painel de Controle Windows XPPainel de Controle Windows XP
Painel de Controle Windows XP
 
Hexxagon Game
Hexxagon GameHexxagon Game
Hexxagon Game
 

Semelhante 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
 
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
 
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
 
Slide blender 3 d apresentação
Slide blender 3 d apresentaçãoSlide blender 3 d apresentação
Slide blender 3 d apresentaçãoJosé Nascimento
 
Desenvolvimento de jogos para MSX
Desenvolvimento de jogos para MSXDesenvolvimento de jogos para MSX
Desenvolvimento de jogos para MSXGiovanni Nunes
 
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
 
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
 
Animação nos Videojogos
Animação nos VideojogosAnimação nos Videojogos
Animação nos VideojogosNelson Zagalo
 
Quasi-engine: Desenvolvendo jogos em QML
Quasi-engine: Desenvolvendo jogos em QMLQuasi-engine: Desenvolvendo jogos em QML
Quasi-engine: Desenvolvendo jogos em QMLAnderson Briglia
 
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
 
Palestra Game Design
Palestra Game DesignPalestra Game Design
Palestra Game Designvincevader
 
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
 
Frameworks Formais de Game Design.
Frameworks Formais de Game Design.Frameworks Formais de Game Design.
Frameworks Formais de Game Design.Pedro Emil Freme
 
Defesa TC V1.2.1
Defesa TC V1.2.1Defesa TC V1.2.1
Defesa TC V1.2.1B Bellaver
 
Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2Fabio Moura Pereira
 

Semelhante 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
 
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
 
Guia xna
Guia xnaGuia xna
Guia xna
 
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
 
Slide blender 3 d apresentação
Slide blender 3 d apresentaçãoSlide blender 3 d apresentação
Slide blender 3 d apresentação
 
Curso Unity3D
Curso Unity3DCurso Unity3D
Curso Unity3D
 
Desenvolvimento de jogos para MSX
Desenvolvimento de jogos para MSXDesenvolvimento de jogos para MSX
Desenvolvimento de jogos para MSX
 
Desenvolvimento De Jogos Na Plataforma Xna
Desenvolvimento De Jogos Na Plataforma XnaDesenvolvimento De Jogos Na Plataforma Xna
Desenvolvimento De Jogos Na Plataforma Xna
 
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
 
Animação nos Videojogos
Animação nos VideojogosAnimação nos Videojogos
Animação nos Videojogos
 
Quasi-engine: Desenvolvendo jogos em QML
Quasi-engine: Desenvolvendo jogos em QMLQuasi-engine: Desenvolvendo jogos em QML
Quasi-engine: Desenvolvendo jogos em QML
 
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
 
Palestra Game Design
Palestra Game DesignPalestra Game Design
Palestra Game Design
 
Projeto jogo da-velha
Projeto jogo da-velhaProjeto jogo da-velha
Projeto jogo da-velha
 
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
 
Frameworks Formais de Game Design.
Frameworks Formais de Game Design.Frameworks Formais de Game Design.
Frameworks Formais de Game Design.
 
Defesa TC V1.2.1
Defesa TC V1.2.1Defesa TC V1.2.1
Defesa TC V1.2.1
 
Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2
 
Jme Games
Jme GamesJme Games
Jme Games
 

Game programming

  • 1. Programação de Jogos: visãogeralparainiciantes dacobrinhaaoBioshockem 50 min… Fabio Fonseca – 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 é baseadoemcenas.
  • 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. Entendi! Mas o quedeveconter? Deveconversar com o gerenciador de recursos e levarumacena e suasrelaçõespara a memória Conter um gerenciador de eventos, onde, a cada frame, seráchecado se devomudar de cena, entrarem um menu, etc Transformaçõesdaprópriacena: rotação, câmera, iluminação. Ponteiropara as entidades… próximo slide
  • 35. 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)
  • 36. 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.
  • 37. 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
  • 38. 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.
  • 40. ! 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 O AI 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.
  • 41. ! Resumo A game engine Uma game engine mínima Log
  • 42. ! 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
  • 43. 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 do Editor

  1. This deck covers 8 common workplace topics and offers suggestion on how you should approach them. I’ve been collecting data on and off for years and thought it would be nice to have it all in one presentation friendly spot. Feel free to use pieces of this presentation as the need arises.
  2. 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.
  3. 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.