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