terça-feira, 15 de outubro de 2013

Material da Oficína do Dia do Blender - Rondonópolis



Material de apoio com templates e códigos, da oficína com o tema Integração do Blender, ROS e Arduino, com objetivo de criar novas ferramentas para o desenvolvimente robótico.

Link do material

quinta-feira, 23 de fevereiro de 2012

Simples sistema LOD para Blender


LOD(Level of Detail) ou "Nível de Detalhamento" é um sistema utilizado em engines gráficas para aumentar o desempenho da aplicação 3d, tornando-o mais leve para o computador. Funciona alterando o nível de detalhamento dos objetos na cena de acordo com a distância do observador, esse detalhamento pode ser varias coisas, o mais comum é a redução de vértices, de perto o objeto fica com um número maior de vértices e conforme o observador se afasta se reduz a quantidade de vértices, pode-se definir níveis de LOD, como alto,médio e baixo para perto, próximo e longe, nada impede que possa ser feito outros níveis. Existe um outro LOD para imagens que é o mipmap que já vem no blender e esta ativado por padrão.

Exemplo de LOD para vértices
Eu estou fazendo algumas maquetes 3d com um nível considerável de vértices e utilizando GLSL para renderização, como o blender não lida bem com GLSL, isto é "fica pesado mesmo com um cenário com pouco objetos", fui forçado a criar um sistema simples para que eu possa continuar utilizar o blender como ferramenta principal de trabalho. O sistema que fiz, é um sistema de controle de vértices, funciona como descrito no parágrafo anterior, porém com algumas peculiaridades, primeiro você precisa reduzir a quantidade de vértices do seu modelo 3d manualmente, isto pode ser feito no blender com o modificador "DECIMATE", ou um aplicativo externo como o MeshLab  que é free e open source. Outro ponto importante é colocar em cada modelo 3d, propriedades informando quem são os seus substitutos para cada nível, colocando o nome da malha e não do objeto, que é um contêiner da malha. Os nível de detalhamento são ajustado no script Python, nas variáveis dist_hi e dist_med.

Na direita o nome das malhas
Ex: No "Cube.001" temos o Objeto e ligado a ele temos o nome da malhas "Med.Cube"


Conclusão:
Os teste de validação se mostraram bem interessantes, pois o sistema LOD não consome muito processamento e conseguiu um aumento de desempenho considerável,  mas isso depende de cada caso, pois talves  em um cenário com pouco elementos o sistema pode não fazer efeito, por outro lado se observou que em cenário com elementos muito complexos "muitos vértices", houve um efeito colateral indesejável. Quando se aproxima de um objeto pela primeira vez ha um travamento no aplicativo, por que o modelo vai ser carregado na memória e isso pode demorar dependendo da complexidade do modelo, mas nas próximas vezes que o modelo for chamado o sistema corresponde bem, por que o modelo se encontra carregado na memoria do computador, talves um sistema de preload resolve isso.
Como o título do artigo enfatiza, é um sistema simples, feito as pressas para uma urgência, o ideal seria um sistema automático de redução de vértices em tempo real, sem a necessidade de redução manual e link dos modelos substitutos ao modelo principal. Um sistema desses poderia estar em forma de add-ons para o blender, o que seria uma melhoria importante para game engine. Acho que o que falta para a BGE são ferramentas que torne o trabalho menos braçal, mais eficiente, mas o bom do blender também pode ser isso, a oportunidade de poder fazer suas próprias soluções e aprender mais com a tarefa.

Blender 2.62
Arquivo .blend Download

terça-feira, 15 de fevereiro de 2011

NeoTextureEdit gerador de textura Open Source



NeoTextureEdit é um programa open source (GNU LGPL v. 3) fácil de usar gráfico baseado em textura perfeita editor processual. Usando funções de base contínua pode gerar imagens de resolução arbitrária, sem degradação da qualidade. Sua principal finalidade é produzir texturas de alta qualidade para aplicações de renderização em tempo real que podem ser armazenadas em alguns KB e sintetizada na inicialização do aplicativo. Mas também pode ser usado para gerar imagens-off line.

Opinião do Blogger:
Vale a pena conferir o site do desenvolvedor e baixar a ferramenta, muito útil e simples de usar.

Como se tornar um profissional da indústria de games



O co-fundador da desenvolvedora brasileira Mojjo.de dá dicas sobre como entrar nesse mercado e preparar seu próprio jogo.
Uma matéria muito interessante sobre profissionais em Game, confira aqui.

sexta-feira, 4 de fevereiro de 2011

Função de ScreenShot durante o jogo - ScreenMaker

Imagem Ilustrativa

Muitas vezes gostaríamos de salvar imagens durante um jogo ou passeio virtual 3d no blender, mas muitos inclusive eu não tinham idéia de como fazer. Dando uma olhada na API da BGE achei uma função chamada 'makeScreenshot()' do módulo Rasterizer que trata da renderização da imagem e tem muitas funções interessantes como coordenadas do mouse, tamanho da tela em pixel e por ai vai.
A função makeScreenshot() é muito simples de ser usado é só  colocar o nome do arquivo que será salvo no parâmetro da função Ex: Rasterizer.makeScreenschot('minha_imagem') e pronto. A imagem será salva na extensão jpg.

Imagem geral do template

Vamos para a lógica do template:
-Criamos um script python que irá fazer o processo de salvar a imagem de preferência ligado na câmera.
-Associamos um sensor do tipo keyboard(teclado) que irá disparar a função de salvar a imagem.
-Criar uma variável no Add Property que será o nosso contador de fotos.

Painel de Logica da BGE

Tirando várias fotos:
O script que desenvolvi tem a função de salvar um arquivo de imagem sempre que uma determinada tecla for pressionada e salva a imagem com um nome diferente em ordem crescente Ex: imagem0, imagem1 etc...

Script Python
____________________________________________________________

# Feito por Marcos Amaral (racom)
# em 27/01/2011


import Rasterizer #MODULO RESPOSAVEL PELA RENDERIZAÇÃO 

import GameLogic as g #MODULO DA BGE

cont = g.getCurrentController() #PARA OBTER OS CONTROLADORES, ACTUADORES E SENSORES
obj = cont.owner #PROPRIETARIO DOS CONTROLADORES

key = cont.sensors['key'] #OBTEM O SENSOR DE TECLADO

arquivo='imagem'+str(obj['contador']) #CRIA O NOME DO ARQUIVO

# SALVA screenshot
if key.positive:
Rasterizer.makeScreenshot(arquivo) #FUNCAO QUE SALVA A IMAGEM
obj['contador'] += 1 #SOMA MAIS UM AO CONTADOR
____________________________________________________________


Download do template:  screenshot.blend


É isso ai, espero que tenho gostado, em breve mais tutoriais sobre BGE.
Até mais!  \o



quinta-feira, 3 de fevereiro de 2011

Template Game Engine


Estou disponibilizando um template criado por mim e usado na oficia do IV Conferência Nacional Blender Pro. Ele trata de funções básicas para se fazer um jogo utilizando Python Script. O código contém comentários para facilitar o entendimento do mesmo. Bons estudos e bom divertimento.

Download do arquivo: script_python.blend

quinta-feira, 30 de dezembro de 2010

Desenvolvimento de IA com BGE

Esse material é parte da Palestra que ministrei na IV Conferência Nacional - Blender Pro, fala sobre lógica de programação, Pathfinder (encontrar o caminho) para jogos e um arquivo .blend demonstrativo.
















 link RTS.blend