Blender Game Engine: Uma introdução

A Blender Game Engine é uma das engines mais populares para desenvolvimento de aplicações 3D interativas. Este artigo apresenta a engine e suas principais funcionalidades de uma maneira breve e possibilitando o desenvolvimento de jogos.

[ Hits: 28.389 ]

Por: Felipe Martins dos Santos em 19/08/2009 | Blog: http://www.ime.usp.br/~fmsantos


Introdução



A Blender Game Engine é uma engine utilizada para o desenvolvimento de aplicações 3D interativas, utilizada principalmente para o desenvolvimento de jogos. Por ser integrada ao Blender, software famoso de modelagem 3D e de criação de animações, é possível modelar todo o game através do Blender e então adicionar elementos lógicos que permitam que os modelos se comportem como jogos.

Os principais elementos da Blender Game Engine (chamada a partir daqui de BGE) são os blocos lógicos (originalmente, logic bricks). Os blocos lógicos são subdivididos em: sensores, controladores e atuadores.

Através dos sensores são detectadas alterações nos ambientes. Sejam elas realizadas pelo jogador, pelo próprio ambiente ou pelo tempo. Os controladores recebem pulsos positivos dos sensores para cada alteração no ambiente e então atuam como portas lógicas quando recebem sinais elétricos. Os controladores podem ser dos tipos: AND, OR, XOR, NAND, NOR, XNOR, de Expressões e Python. Quando a saída gerada pelo controlador é positiva, atuadores podem gerar alguma ação. Os atuadores reagem modificando então algum objeto ou propriedade do ambiente.

Sensores

Os sensores detectam os eventos gerados durante o jogo. A BGE possui alguns sensores que cobrem diversas funcionalidades necessárias para o desenvolvimento de jogos. Os sensores disponíveis na BGE são: Always Sensor, Delay Sensor, Keyboard Sensor, Mouse Sensor, Touch Sensor, Collision Sensor, Near Sensor, Radar Sensor, Property Sensor, Random Sensor, Ray Sensor, Message Sensor, Joystick Sensor e Actuator Sensor.
  • Always Sensor: é usado para gerar eventos a todo instante.
  • Delay Sensor: atrasa a reação a algum evento. Útil quando outra tarefa precisa ser realizada antes de algum evento.
  • Keyboard Sensor: detecta entrada do teclado. A entrada pode ser gravada como uma propriedade. Útil para jogos onde o teclado é o principal dispositivo.

    Ex.: Ao teclar 'R' o personagem recarrega a arma. Essa situação poderia ser modelada com um Keyboard Sensor associado a tecla 'R'. Que poderia então estar conectado a um controlador AND e a um atuador do tipo Property que adicionaria munição a arma do personagem se houvesse munição reserva.

  • Mouse Sensor: detecta entrada do mouse. O controlador consiste apenas de uma lista de tipos de eventos de mouse, podendo ser o evento: botão esquerdo, botão central, botão direito, scroll up, scroll down, movimento, mouse sobre objeto, mouse sobre qualquer objeto.
  • Touch Sensor: envia um pulso positivo quando um objeto está em contato com outro objeto.
  • Collision Sensor: funciona como o Touch sensor, mas pode também filtrar alguma propriedade.
  • Near Sensor: detecta objetos que estão dentro de uma distância pré-especificada.

    Ex.: Em jogos de espionagem poderia ser utilizado para modelar que o personagem está em uma área de conhecimento dos inimigos.

  • Radar Sensor: funciona como Near Sensor, mas apenas dentro de um ângulo em um eixo.
  • Property Sensor: detecta mudanças nas propriedades de um objeto. Possui quatro modos: igual, não igual, intervalo e alterado.

    Ex.: Poderia ser utilizado para informar ao jogador que o tempo para se realizar alguma tarefa está se esgotando.

  • Random Sensorv: gera pulsos aleatórios. É necessário fornecer uma semente como ocorre em muitas linguagens de programação. O 0 não é randômico para testes e depuração.
  • Ray Sensor: lançar um raio e detecta se o raio acertou algo.
  • Message Sensor: usado para enviar texto ou valores de propriedades. Envia um pulso positivo por mensagem.
  • Joystick Sensor: detecta eventos de joystick. Esses eventos são necessários para quem deseja criar um jogo com outra opção além de mouse e teclado.
  • Actuator Sensor: detecta quando um atuador com nome especificado no campo Act é ativado. Torna possível a geração de eventos cíclicos.

    Ex.: Em um jogo de futebol, o time adversário poderia se comportar de maneira mais agressiva após sofrer um gol.

Controladores

Os controladores atribuem lógica aos pulsos obtidos por sensores.

Os controladores disponíveis no Blender são: AND, OR, XOR, NAND, NOR, XNOR, Expressões e Python.

Controladores lógicos:

A tabela a seguir, obtida na Blender Wiki, oferece uma visão de como os pulsos são manipulados a partir de operações da lógica matemática.

Sensores Positivos==	Controlador==============
==============AND	OR	XOR	NAND NOR	 XNOR
Nenhum=========F	F	F	V	 V 	 V
Um============F	V	V	V	 F	 F
Múltiplos, nem todos=F	V	F	V	 F	 V
Todos ==========V	V	F	F	 F	 V

A coluna 'Sensores Positivos' demonstra a entrada do controlador, podendo ser: nenhum sinal positivo, um sinal positivo, múltiplos sinais positivos (mas nem todos) e todos os sinais positivos. Os controladores estão divididos e para cada 1 dos 4 tipos de entrada é gerada uma saída apropriada.

Exemplos:
  1. Ao obter todos as entradas positivas, um controlador AND gera uma saída V (Verdadeira/Positiva).
  2. Ao obter um sinal positivo de entrada (e apenas um), um controlador OR gera uma saída V (Verdadeira/Positiva).
  3. Ao obter apenas um sinal positivo na entrada (de muitos), um controlador AND gera uma saída F (Falsa/Negativa).

Nas situações acima especificadas, os exemplos a. e b. acionariam um atuador; enquanto a opção c. não acionaria.

Além dos controladores já mencionados, existem dois tipos de controladores 'especiais': Expression Controller e Python Controller.

Expression Controller:

Um controlador que é muito funcional em alguns casos. Pode além de receber o pulso de um sinal, verificar uma propriedade do objeto.

Controlador Python:

Controlador que checa a entrada usando um script programado em Python ou algum outro arquivo contendo código Python. Funcionam em dois modos: script ou módulo. Ambos podem ser escritos em editores de texto e armazenados dentro de um arquivo .blend, ou podem ser scripts externos.
  • Script Mode: o controlador é linkado ao script e o script é executado completamente antes de a lógica prosseguir. Algumas alterações do script podem passar despercebidas, sendo visível apenas a última delas.
  • Module Mode: Disponível a partir da versão 2.49 do Blender. É executada uma função disponível em um módulo. A chamada é realizada por "Modulo.Funcao". A função é executada toda vez que o controlador é chamado. Mas outras funções e variáveis fora do escopo da função chamada serão executadas apenas uma vez.

Atuadores

O atuador realiza alguma ação no ambiente após receber algum sinal positivo de seu respectivo controlador. Os atuadores disponíveis na engine são:
  • Movimento: configura o objeto em movimento e rotação, existem diferentes opções desde teletransporte até empurrar objetos. Esse tipo de atuador é útil para a movimentação de personagens.
  • Forma / Ação: trata animações armazenadas nas teclas de forma e animadas com ações de forma.
  • Ação: trata de ações armature (corpo de personagens), isto é visível apenas se um corpo está selecionado.
  • Restrição: restrições são usadas para limitar locais de objetos, distância ou rotação. Esses são úteis para controlar a física do objeto no jogo.
  • IPO: controla animações IPO, estas podem mover, rotacionar, redimensionar, mudar cores de objetos e mais.
  • Camera: tem opções para seguir objetos suavemente, primariamente para objetos camera, mas algum objeto pode usar isso.
  • Som: usado para tocar sons no jogo. Ao destrancar uma porta do jogo esse atuador pode tocar algum som característico.
  • Propriedade: manipula as propriedades do objeto, como atribuição, adicionar, ou copiar. Atuador mencionado no exemplo do Keyboard Sensor. No jogo Sonic por exemplo, esse atuador poderia ser utilizado para incrementar o número de rings coletados pelo porco-espinho.
  • Editar Objeto: edita a malha do objeto, adiciona objetos ou os destrói, isso pode ser usado também para mudar a malha de um objeto. Cena: gerencia as cenas em seu arquivo .blend, estes podem ser usado como níveis ou para UI e background.
  • Aleatório: cria valores aleatórios que podem ser armazenados nas propriedades.
  • Mensagem: envia mensagens que podem ser recebidas por outros objetos para ativá-los.
  • CD: toca música de cd.
  • Jogo: gerencia o jogo inteiro e pode fazer coisas como reiniciar, sair, carregar e salvar o jogo.
  • Visibilidade: muda a visibilidade do objeto.
  • Filtro 2D: filtro para efeitos especiais como cores sepia ou blur.
  • Pai: pode configurar um pai para o objeto, ou remover o pai. Em um jogo onde é necessário salvar algum personagem ou mesmo ter alguma companhia, o personagem principal poderia se tornar pai de outro personagem, que o seguiria para todos os lugares.
  • Estado: muda estado do objeto.

Bullet Engine

A Bullet Engine é um elemento importante para a criação de jogos, pois adiciona elementos físicos ao jogo. Assim, situações como colisões de objetos e quedas de objetos devido a gravidade podem parecer mais realistas.

A Bullet Engine não é própria do Blender, mas sim uma engine separada que tem suas funções dedicadas ao tratamento da física nos jogos e outras aplicações interativas. É muito utilizada para a criação de games, inclusive em outras engines para a criação de jogos. Crystal Space e C4 Engine são duas dessas engines.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Exemplo usando Logic Bricks
   3. Exemplo usando Logic Bricks e física com a Bullet Engine
   4. Finalizando
Outros artigos deste autor

Compilador GNU Prolog

Reprodução de arquivos WAV com SDL_mixer e linguagem C

LaTex no Fedora 20 - Instalação via YUM

Leitura recomendada

Você conhece o NetHack?

Instalando GTA V no Fedora com placas Nvidia

Emulando o saudoso jogo ELITE em seu Linux

Mupen64plus, o melhor emulador de Nintendo 64 disponível para GNU/Linux

Criando um servidor de Counter Strike 1.6 + AdminMod + MetaMod + StatsMe

  
Comentários
[1] Comentário enviado por felipemartinsss em 19/08/2009 - 12:22h

Bom dia pessoal,
houve um problema para exibir a tabela na página "Introdução", no tópico "Controladores". Para visualizarem corretamente a tabela acessem: http://sites.google.com/site/slackerbrasil/blender-html/blender.html?attredirects=0

Obrigado.

[2] Comentário enviado por acollucci em 21/08/2009 - 13:24h

cara muito bom o artigo, apesar de que eu nao entendo nada de blender... parabens!

[3] Comentário enviado por felipemartinsss em 21/08/2009 - 14:15h

Obrigado pelo comentário acollucci.
Eu também não conheço muito, comecei a estudar por causa da Game Engine.
Tente implementar, acho que você vai gostar.

Abraço.

[4] Comentário enviado por br4in5t0rm em 24/08/2009 - 10:18h

Mais um artigo excelente Felipe.
Parabéns pela qualidade e pela didática empregada no artigo sobre game engine do Blender.
\__/
(oo)
_||_
erick

[5] Comentário enviado por felipemartinsss em 24/08/2009 - 12:02h

Obrigado br4in5t0rm.
Estou me esforçando para ter conteúdo suficiente para outro texto em breve.

Abraço

[6] Comentário enviado por Cr4sh_Dump em 06/02/2013 - 15:05h

Primeiramente queria dar um parabens pelo artigo e pela dica de que se nos nao fizermos os jogos... quem os criara? mais tenho apenas uma pergunta sou programador c/c++ mais o pouco que sei de programaçao de jogos sempre foi sobre sobre allegro e qt 4 + opengl entao desculpe a minha ignorancia. Minha pergunta e a seguinte tive olhando para interface do blender e vi que se colocar varios blocos logicos numa mesma figura chega um momento que nao é possivel interligarlos pois nao cabem todos na tela do pc. Como se contorna isso?

[7] Comentário enviado por felipemartinsss em 19/09/2014 - 11:45h


[6] Comentário enviado por Cr4sh_Dump em 06/02/2013 - 15:05h:

Primeiramente queria dar um parabens pelo artigo e pela dica de que se nos nao fizermos os jogos... quem os criara? mais tenho apenas uma pergunta sou programador c/c++ mais o pouco que sei de programaçao de jogos sempre foi sobre sobre allegro e qt 4 + opengl entao desculpe a minha ignorancia. Minha pergunta e a seguinte tive olhando para interface do blender e vi que se colocar varios blocos logicos numa mesma figura chega um momento que nao é possivel interligarlos pois nao cabem todos na tela do pc. Como se contorna isso?


Cr4sh_Dump, peço desculpas porque não pude responder na época em que você fez a pergunta.
No momento não estou com um ambiente Blender configurado para fazer o teste, mas no Blender você pode deslocar a câmera e mover-se pelo cenário que
está criando. Então teoricamente, se você quer adicionar novos Logic Bricks, você pode expandir seu cenário e isso não seria problema.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts