42

Click here to load reader

Game programming

Embed Size (px)

Citation preview

Page 1: Game programming

Programação de Jogos: visãogeral para iniciantes

da cobrinha ao Bioshock em 50 min…

Fabio “Draco”Fonseca

http://catavento.art.br

Page 2: Game programming

Disclaimer

• Esta apresentação é baseada nos meusestudos sobre programação de jogos. Qualquer disparidade com autor X ou Y oudesign Z ou W ou engine A ou B é por suaconta 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

Meta

• Entender o Game Loop

• Entender o que é e quais são os componentesde uma game engine

Page 4: Game programming
Page 5: Game programming

Antes de começar, o que você precisasaber?

• 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

Let’s begin the operation!

2D ou 3D, escolhendo o número de dimensões

• Qual o problema a ser resolvido e para qualplataforma?

• 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

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 gruposcriassem 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 ficariamseparadas dos outros elementos, permitindo que vários jogos do mesmo estilo fossemfeitos 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

Gentleman, start your engines

“We should reserve the term “game engine” for software that is extensible and canbe used as the foundation for many differente games without major modification” –Jason Gregory, Game Engine Design Architecture

Page 9: Game programming

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 egerenciador de cenas

HUD, efeitos visuais

Page 10: Game programming

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

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

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

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

• 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 seuscomponentes1

Page 15: Game programming

• Custos: Time is money. Inclusive o seu tempo livre.

• Divisão de trabalho: componentesindependentes sendo produzidos emseparado; boas práticas.

• Sucesso: Você tem uma equipe, e agora!?

• Foco no negócio.

Por que utilizar

Precisar não precisa… ou um breveconto de Engenharia de software

Page 16: Game programming

Dividir e conquistar

Page 17: Game programming

Dividir e conquistar

Entidades Física

RenderizaçãoCena

Recursos

Input

Áudio

Uma game engine mínima

Page 18: Game programming

• 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

• 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

• Responsável pelo consumo otimizado de todos osarquivos que a game engine utilizará.

• Alimentação dos outros componentes. Emespecífico:– Preenche gerenciador de cenas com seus grafos

(“desenho” das cenas).– Conecta as entidades do game

(personagens, cenário, etc) com suas respectivasimagens 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

O que é…

Scene Graph – Grafo de cena

http://www.cs.berkeley.edu/~sequin/CS184/LECT_09/L7.html

Page 22: Game programming

• 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

Input devices, já perdendo o controle

Planejar para o futuro

Mind Control Helmet

Page 24: Game programming

Vocabulário importante

Esses dois monstros sempre voltam:

Page 25: Game programming

• Sempre relegado, sempre uma dor de cabeçadepois.

• 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

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 27: Game programming

• No final do dia, é atualizar a tela com as informações obtidas até o momento por todosos outros gerenciadores.

• Algoritmo do pintor: resolvendo o problemada visibilidade dos elementos 3D -> 2D; z-order.

• Bibliotecas: DirectX/OpenGL, Ogre3D, SDL, SFML.

Desmembrando

Renderização, o algoritmo do pintor6

Page 28: Game programming

Monstro do Polling ataca novamente

• Checa os gerenciadoresde cena e objetos

• Renderiza na ordemencontrada no grafo de Cena, i.e. respeitando o algoritmo do Pintor.

O que mudou entre frames?

Page 29: Game programming

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

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

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

• Cada fase é uma cena completa, e suaconfiguração geral e relação entre os elementosque 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, porexemplo).

• Biblioteca: não conheço, mas Ogre3d e Cocos2d são baseado em cenas.

Desmembrando

Cena, fazendo uma7

Page 33: Game programming

• Pense nos designers

• Trabalhar com elementos concretos é mais fácildo 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 cenade uma maneira ou outra.

• É intuitivo (sort of…)

Volta do grafo de cena

Entendendo o porquê do arquivoexterno

Page 34: Game programming

• 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 35: Game programming

• Listas de objetos sãoutilizadas para teste de colisão e outros eventos. Se utilizarmos uma classebase, é mais fácil manipulá-los.

• Tudo que está na tela podeser uma entidade, mas nemtudo que está na tela é a MESMA entidade. Umafábrica de componentesresolve o problema.

Criando bichos

A design pattern factory em jogos

Page 36: Game programming

• 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 soubercomo fazer um.

• Mesmo se for 2D, vale a pena usar físicanewtoniana “de verdade”. Não tenha medo.

• Bibliotecas prontas: Box2D, Havok, PhysX

Desmembrando

Física, caindo de pau no Newton9

Page 37: Game programming

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 38: Game programming

Bibliotecas

Box2D

Page 39: Game programming

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.

Page 40: Game programming

Resumo

A game engine

Entidades Física

RenderizaçãoCena

Recursos

Input

Áudio

Uma game engine mínima

Page 41: Game programming

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 42: Game programming

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