Game programming
-
Upload
fabio-fonseca -
Category
Documents
-
view
695 -
download
4
Transcript of Game programming
![Page 1: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/1.jpg)
Programação de Jogos: visão geral para iniciantes
da cobrinha ao Bioshock em 50 min…
Fabio Fonseca – catavento.art.br
![Page 2: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/2.jpg)
Disclaimer
• Esta apresentação é baseada nos meus estudos sobre programação de jogos. Qualquer disparidade com autor X ou Y ou design Z ou W ou engine A ou B é por sua conta e risco. Mas eles vão te dizer que o game loop é o mesmo (bem, eu mudei a ordem do game loop padrão...).
![Page 3: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/3.jpg)
Meta
• Entender o Game Loop
• Entender o que é e quais são os componentes de uma game engine
![Page 4: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/4.jpg)
VS.
![Page 5: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/5.jpg)
Antes de começar, o que você precisa saber?
• Programar– Pode ser POO ou estruturada
• Física e Matemática– Saber aquela do cursinho ajuda horrores…
• Google e Fóruns– pontov.com.br, gamedev.net, box2d.net
![Page 6: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/6.jpg)
Let’s begin the operation!
2D ou 3D, escolhendo o número de dimensões
• Qual o problema a ser resolvido e para qual plataforma? • Simples e original vs. complexo e padrão
– Tive uma idéia! Vou fazer o Resident Evil 7!– O número de dimensões não importa dependendo da tua
escolha. • Complexo e original
– Se Δt -> ∞ ...
![Page 7: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/7.jpg)
Gentleman, start your engines
Surge com Doom em meados dos anos 90. Programado com relativa separação entre sistemas de renderização, colisão, audio, arte, mapas e regras de jogo.
Mods: a separação criada pela ID permitiu que gamers individuais e pequenos grupos criassem jogos baseados na estrutura de Doom.
Upgrade: Unreal, Quake III com linguagens próprias de script.
“Data-driven architecture”: Teoricamente a regra de jogo e a parte lógica ficariam separadas dos outros elementos, permitindo que vários jogos do mesmo estilo fossem feitos a partir da mesma plataforma.
Mas não há separação clara nem entre elementos nem entre o que é um jogo e o que é a engine.
“Tudo acontece na periferia. Brigas, mortes na periferia” – Ratos de porão
![Page 8: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/8.jpg)
Gentleman, start your engines
“We should reserve the term “game engine” for software that is extensible and can be used as the foundation for many differente games without major modification” – Jason Gregory, Game Engine Design Architecture
![Page 9: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/9.jpg)
What’s inside?
Hardware e SO.
Abstração do SO e SDKsespecíficas para cada sistema
Inicialização e configuração
Gerenciador de física eanimação de corpos
Áudio e rede
Específico do jogo
Renderização e gerenciador de cenas
HUD, efeitos visuais
![Page 10: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/10.jpg)
Depois, as ferramentas
O eterno debate sobre linguagem de programação e sobre qual engine utilizar
• A melhor e mais eficiente linguagem de programação– É aquela que você mais sabe– É aquela que responde o problema “plataforma alvo + eficiência
computacional”• Engine
– É aquela que você mais sabe– É aquela que vai te oferecer maior suporte e menor tempo de aprendizado –
e está mais próxima do game que você tem em mente– É aquela que utiliza a linguagem que você mais sabe
![Page 11: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/11.jpg)
20 infinite 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.
![Page 12: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/12.jpg)
21 infinite loop
• Exemplo:while (g_renderManager->update()) { g_sceneManager->update();
entityManager->update();
psx->update();
inputManager->update(); }
Pinta na tela o resultado final do frame atual
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.
![Page 13: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/13.jpg)
22 infinite 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
![Page 14: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/14.jpg)
• Por que utilizar– Precisar não precisa, mas ajuda bastante
• Dividir e conquistar– Cada gerente no seu quadrado– Estrutura geral
Visão geral
Game engine simples e seus componentes1
![Page 15: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/15.jpg)
• Custos: Time is money. Inclusive o seu tempo livre.
• Divisão de trabalho: componentes independentes sendo produzidos em separado; boas práticas.
• Sucesso: Você tem uma equipe, e agora!? • Foco no negócio.
Por que utilizar
Precisar não precisa… ou um breve conto de Engenharia de software
![Page 16: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/16.jpg)
Dividir e conquistar
![Page 17: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/17.jpg)
Dividir e conquistar
Entidades Física
RenderizaçãoCena
Recursos
Input
Áudio
Uma game engine mínima
Log
![Page 18: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/18.jpg)
• Precisar não precisa…• Mesmo se for um sistema simples com assert e
printf já vale.• Sofrimento pessoal: saída de std::cout no console
deixava o sistema inativo. Melhor cuspir para um arquivo texto.
• Bibliotecas profissionais: Log4j, glog• Cláusulas de throw / catch
Desmembrando
Por que um componente de log salvará tua vida2
![Page 19: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/19.jpg)
• Arquivos de configuração– Áudio, imagens, grafos de cenas, modelos 3D, etc
• Tipos de arquivos– XML, Binários, DX Studio
Desmembrando
Recursos, uma colheita feliz3
![Page 20: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/20.jpg)
• Responsável pelo consumo otimizado de todos os arquivos que a game engine utilizará.
• Alimentação dos outros componentes. Em específico:– Preenche gerenciador de cenas com seus grafos
(“desenho” das cenas).– Conecta as entidades do game (personagens, cenário, etc)
com suas respectivas imagens e sons.– Inicializa a física com as configurações escolhidas– Mapeia controles e teclas para o funcionamento no jogo.
Tenha seus arquivos estruturados de maneira amigável
Componente de recursos
![Page 21: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/21.jpg)
O que é…
Scene Graph – Grafo de cena
http://www.cs.berkeley.edu/~sequin/CS184/LECT_09/L7.html
![Page 22: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/22.jpg)
• Troca de contextos– O gerenciador deve ser capaz de alterar o mapping
dos controles conforme contexto• Polling / Listeners– Pode-se checar o estado do controle a cada frame
ou ficar na escuta de um evento.• Independente do Hardware– Abstração via bibliotecas ou wrapping
Desmembrando
Input devices, não perca o controle4
![Page 23: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/23.jpg)
Input devices, já perdendo o controlePlanejar para o futuro
Mind Control Helmet
WTF???????
![Page 24: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/24.jpg)
Vocabulário importante
Esses dois monstros sempre voltam:
Polling
Listeners
![Page 25: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/25.jpg)
• Sempre relegado, sempre uma dor de cabeça depois.
• O problema da sincronia• BGM vs. FX’s– BGM: eventos e troca de contexto– FX’s: listeners ou polling
• BASS audio
Desmembrando
Audio, 1, 2, 3, SOM.5
![Page 26: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/26.jpg)
21 infinite loop
• Exemplo:while (g_renderManager->update()) { g_sceneManager->update();
entityManager->update();
psx->update();
inputManager->update(); }
Pinta na tela o resultado final do frame atual
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.
E O SOM????
![Page 27: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/27.jpg)
• No final do dia, é atualizar a tela com as informações obtidas até o momento por todos os outros gerenciadores.
• Algoritmo do pintor: resolvendo o problema da visibilidade dos elementos 3D -> 2D; z-order.
• Bibliotecas: DirectX/OpenGL, Ogre3D, SDL, SFML.
Desmembrando
Renderização, o algoritmo do pintor6
![Page 28: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/28.jpg)
Monstro do Polling ataca novamente
• Checa os gerenciadores de cena e objetos
• Renderiza na ordem encontrada no grafo de Cena, i.e. respeitando o algoritmo do Pintor.
O que mudou entre frames?
Polling
![Page 29: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/29.jpg)
Algoritmo do Pintor e Z-order
• Objetos do fundo são desenhados primeiramente.• Ordem de profundidade é respeitada. Objetos com menor
coordenada Z são desenhados primeiros. • Há redundância nas áreas pintadas, mas problema da visibilidade é
resolvido. O resultado final contém somente os objetos observáveis.
Primeiramente o que vem primeiro
![Page 30: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/30.jpg)
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
![Page 31: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/31.jpg)
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
![Page 32: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/32.jpg)
• Cada fase é uma cena completa e sua configuração geral e relação entre os elementos que a compõem são feitos por arquivos externos.
• Listeners para eventos• É uma ponte entre o renderizador e o conjunto de
elementos “vivos” (player e inimigos, por exemplo).• Biblioteca: não conheço, mas Ogre3d é baseado em
cenas.
Desmembrando
Cena, fazendo uma7
![Page 33: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/33.jpg)
• Pense nos designers• Trabalhar com elementos concretos é mais fácil
do que tileset• Mesmo um XML de configuração é mais fácil de
se consumir do que um ASCII• Se trabalhar com 3D, vai bater em grafos de cena
de uma maneira ou outra.• É intuitivo (sort of…)
Volta do grafo de cena
Entendendo o porquê do arquivo externo
![Page 34: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/34.jpg)
• Deve conversar com o gerenciador de recursos e levar uma cena e suas relações para a memória
• Conter um gerenciador de eventos, onde, a cada frame, será checado se devo mudar de cena, entrar em um menu, etc
• Transformações da própria cena: rotação, câmera, iluminação.
• Ponteiro para as entidades… próximo slide
Entendi! Mas o que deve conter?
![Page 35: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/35.jpg)
• Todos os sprites em um só lugar• Ponte entre e o gerenciador de cena e o de
física• É ótimo ter uma fábrica de entidades (a design
pattern Factory)
Desmembrando
Entidades, tudo o que não for cenário ou som8
![Page 36: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/36.jpg)
• Listas de objetos são utilizadas para teste de colisão e outros eventos. Se utilizarmos uma classe base, é mais fácil manipulá-los.
• Tudo que está na tela pode ser uma entidade, mas nem tudo que está na tela é a MESMA entidade. Uma fábrica de componentes resolve o problema.
Criando bichos
A design pattern factory em jogos
![Page 37: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/37.jpg)
• Na verdade, uma biblioteca de física é um motor de animação dos elementos na tela
• Não crie seu solver de física, mesmo se souber como fazer um.
• Mesmo se for 2D, vale a pena usar física newtoniana “de verdade”. Não tenha medo.
• Bibliotecas prontas: Box2D, Havok, PhysX
Desmembrando
Física, caindo de pau no Newton9
![Page 38: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/38.jpg)
EDOs, EDPs, Êita
O problema das equações diferenciais
generic scalar transport equation
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.
![Page 39: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/39.jpg)
Bibliotecas
Box2D
![Page 40: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/40.jpg)
Resumo
O game loop!• Exemplo:
while (g_renderManager->update()) { g_sceneManager->update();
entityManager->update();
psx->update();
inputManager->update(); }
Pinta na tela o resultado final do frame atual
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.
E O SOM E O AI E A REDE
E ....????
![Page 41: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/41.jpg)
Resumo
A game engine!Entidades Física
RenderizaçãoCena
Recursos
Input
Áudio
Uma game engine mínima
Log
![Page 42: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/42.jpg)
Inteligência artificial• Implementação, algoritmos e gerenciadores
Rede• Multiplayer online• Gravação / acesso
Engines / SDKs• Números demais para mencionar• Pesquise conforme necessidade, hardware e plataforma(s) de interesse
Estrutura de dados e algoritmos• De listas até Quad/Octress
Apenas que … busquem conhecimento…• Quem não tem o Bilú, que use o Google
There is a lot more…
O que faltou!
![Page 43: Game programming](https://reader035.fdocuments.net/reader035/viewer/2022081421/558ec7e61a28ab72628b47d6/html5/thumbnails/43.jpg)
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