Desenvolvimento de um Escalonador de Cenas para motores de jogos
Lucas Pinheiro Otaviano André
Por que separar o código do jogo do código dO MOTOR ?
- Prática utilizada em jogos, como Doom da Id Software
- Separação bem definida entre o código do jogo e motor
- Fácil de reutilizar
- Maior organização
- Maior manutenabilidade de código
- Baseado no conceito de um escalonador de cenas
- Utilizado no Nightmare Fiction Framework


Por que separar o código do jogo do código dO MOTOR ?

Fonte: Game Engine Architecture Second Edition - Jason Gregory
- Motor de jogos desenvolvido em C++(11)
- Utilizando Modern OpenGL(GL3.3+)
- Atualmente sendo utilizado para o desenvolvimento de um fã game de Resident Evil.
- Código aberto sobre a licença MIT
NF FRaMEwork

ESCALONADORES SISTEMAS OPERACIONAIS

- O escalonador vai despachar o processo que deve ser executado no momento
- Cada processo tem um estado e dependendo do estado o escalonador vai realizar diferentes tarefas com ele (inicializar, executar, encerrar).
- Prática geralmente utilizada por escalonadores de Processos e Threads
DESENVOLVIMENTO

- A partir dessa ideia de escalonador, temos o conceito de Escalonador de Cenas.
- Uma cena é uma classe genérica que vai utilizar o conceito de polimorfismo, onde as classes que herdam dela podem ter seu comportamento modificado através da herança.
- O controle de uma cena é feito através do escalonador
DESENVOLVIMENTO

Estados de uma cena
- A cena diz ao escalonador através dos estados, o que deve fazer com a cena que está sendo executada.
- O escalonador vai ser executado com frequência e verificar o estado atual da cena que está sendo executada. As ações tomadas por ele variam de acordo com o estado da cena.
- O escalonador deve garantir que quando uma cena for encerrada os recursos alocados por ela devem ser liberados da memória.
Estados de uma cena e escalonador
- Caso a cena esteja no estado INIT, o escalonador deve passar a referência dos objetos utilizado por essa cena e após isso chamar a função para inicializar os recursos da cena.
Estados de uma cena e escalonador
- Caso a cena esteja no estado INIT, o escalonador deve passar a referência dos objetos utilizado por essa cena e após isso chamar a função para inicializar os recursos da cena.
- Caso a cena esteja no estado RUN, o escalonador apenas vai executar a função de maquina de estados da cena.
Estados de uma cena e escalonador
- Caso a cena esteja no estado INIT, o escalonador deve passar a referência dos objetos utilizado por essa cena e após isso chamar a função para inicializar os recursos da cena.
- Caso a cena esteja no estado RUN, o escalonador apenas vai executar a função de maquina de estados da cena.
- Caso a cena esteja no estado SLEEP, o escalonador deve pegar qual a próxima cena e alocar se necessário. Caso ela esteja no estado SLEEP, o escalonador deve mudar o estado da cena para RUN.
Estados de uma cena e escalonador
- Caso a cena esteja no estado INIT, o escalonador deve passar a referência dos objetos utilizado por essa cena e após isso chamar a função para inicializar os recursos da cena.
- Caso a cena esteja no estado RUN, o escalonador apenas vai executar a função de maquina de estados da cena.
- Caso a cena esteja no estado SLEEP, o escalonador deve pegar qual a próxima cena e alocar se necessário. Caso ela esteja no estado SLEEP, o escalonador deve mudar o estado da cena para RUN.
- Caso a cena esteja no estado END, o escalonador deve pegar qual a próxima cena e alocar se necessário. Caso ela esteja no estado SLEEP, o escalonador deve mudar o estado da cena para RUN. Como o estado da cena atual é END, o escalonador deve liberar todos os recursos alocados por ela.
Funcionamento
Trabalhos futuros

- Compartilhamento de recursos entre cenas, assim, uma cena pode enviar um buffer contendo informações para a outra cena.
- Paralelismo de cenas, nessa melhoria o escalonador pode utilizar threads e executar duas cenas ao mesmo tempo. Isso seria útil quanto por exemplo, precisamos de uma cena secundária que vai carregar os recursos(texturas, modelos 3d, cenários) enquanto a primaria renderiza o que já foi carregado pela cena secundária.
ESCALONADOR DE CENAS
Dúvidas ?

Github: https://github.com/St4rk/nightmare-fiction
Desenvolvimento de um Escalonador de Cenas para motores de jogos
By St4rk
Desenvolvimento de um Escalonador de Cenas para motores de jogos
- 222