caranguejo peixe é,
caranguejo só é peixe lá no fundo da maré.

Pois é meus amigos existe mais sabedoria nesta antiga cantiga de ninar do que a gente imagina.
Eu digo isso porque passei boa parte da última semana pesquisando vídeos de caranguejo no YouTube e preparando algumas animações para o trabalho.

Você sabia que além de andar de lado, o caranguejo é super veloz embaixo d’água?

Bom, parte da graça de se animar um caranguejo é fazê-lo acompanhar as deformações do terreno, de modo que pareça que ele realmente está caminhando sobre a areia.

Está com pressa? Quer ver o resultado logo? Então dá uma olhada:


Holy Crab from Dalai Felinto on Vimeo.

Como o projeto vai ser animado dentro da GameEngine do Blender, a melhor maneira de se controlar a posição do caranguejo é com a novíssima função obj.alignAxisToVect().Esta função foi implementada no Blender em Junho, aprimorada em Julho e atualmente só está presente nas versões de desenvolvimento do Blender.

Agora só precisamos de um sensor do tipo Ray ligado ao nosso caranguejo, e com este sensor vamos ativar o nosso código:

import GameLogic as G
cont = G.getCurrentController()
own = cont.getOwner()
loc = own.getPosition()
ray = cont.getSensors()[0]

hitLoc = ray.getHitPosition()
hitNorm = ray.getHitNormal()

loc[2] = hitLoc[2] + 0.01
own.setPosition(loc)

try:  # pra evitar conflito com versões antigas do Blender
own.alignAxisToVect(hitNorm, 2, 0.5)

except:
pass

Se você já está se familiarizando com Python, vai ver que o script não tem nada de mais. Se você não entendeu o script mas conseguiu fazê-lo funcionar, parabéns :). Se você não entendeu nada e não sabe o que está fazendo nesta página, reclame com quem te trouxe aqui 😀

Acho que é isso que tinha pra falar.
Espero que tenham gostado (eu gostei 😉 )

Um grande abraço,
Dalai Felinto (dfelinto)

Algumas pérolas do YouTube no quesito caranguejo:

Rapaz, não é que estou gostando dessa história de mexer no código do Blender 🙂

Isso me lembra os tempos do Civilization I, quando eu ficava alterando a história que aparecia no início do jogo junto com meu irmão. Na época os arquivos com a história eram arquivos comuns de texto, e bastava um pouco de curiosidade pra fuçar os arquivos e um tanto de criatividade para se divertir.

Hoje em dia o mais próximo que eu vejo deste tipo de personalização são definitivamente os programas de código aberto. O Blender é um deles, e por conta disso todo o seu código fonte se encontra disponível na internet para se estudar, modificar e redistribuir.

Eu já ouvi que na prática isto não é tão vantajoso, pois afinal não são tantas as pessoas que tem conhecimento suficiente pra lidar com programação. Eu particulamente não acredito nisso. Algumas vezes mesmo se você não tiver condições de resolver o problema, dar uma espiada no código ajuda ao menos a elucidá-lo.

Quer um exemplo?

Hoje na UBC, estávamos tentando mais uma vez solucionar um problema no projeto. Parte da dinâmica da visualização do fundo do mar está no nado dos cardumes. É muito rico visualmente ver os peixes se aglomerando e nadando em harmonia.

Para fazer isso em Blender, precisávamos de um peixe líder, e para fazer o cardume seguir o líder, o Mike escreveu um script bem bacana para controlar o que chamamos de AI (inteligência artificial). Para simplificar o processo, resolvemos que seria melhor se usássemos um recurso do Blender chamado TrackTo (Actuator->Edit Object->TrackTo).Pois bem, tudo parecia estar funcionando perfeitamente, mas reparamos que quando os peixes alcançavam o líder, eles começavam a nadar rumo ao infinito azul formando uma linda parede de peixes.

wall of fish

Puxa vida e agora ? ? ?

Read More →

*Aviso ao navegante, artigo técnico ao longo 🙂 Prossiga por sua conta e risco *

Eu tenho trabalhado direto com a GameEngine do Blender. Uma das coisas que tenho reparado, é a quantidade de voltas e truques que temos que fazer às vezes para resolver operações bem simples.

Bom, esta semana estava precisando otimizar o processo de deleção de objetos na GameEngine. Normalmente, para se deletar um objeto, é necessário alguns passos.
Por exemplo:

1) Se cria uma propriedade (property) booleana chamada DELETAR que tenha como valor False.

2) Se cria um sensor do tipo Property, que seja ativado toda vez que a propriedade DELETAR seja True.

3) É necessário usar um actuator EditObject->EndObject associado a este sensor para então deletar o objeto assim que se mudar a propriedade DELETAR para True.

4) E por fim, é preciso um código em Python ou algum outro método dentro da GameEngine para alterar a propriedade DELETAR para True do objeto que queremos eliminar.

Como estava achando este método muito pouco prático (por mais que seja bem engenhoso), resolvi ir atrás de outras soluções.

Acabou que resolvi que o melhor seria alterar o código do Blender. Nessas horas que se vê como é bom trabalhar com software livre.

Esta não é a primeira vez que mergulho no código do Blender, já tinha outras vezes alterado o limite de Clipping do 3Dview, e mais recentemente venho tentado habilitar um método de estereoscopia espelhada na GameEngine.
Bom, por isso mesmo eu sabia que seria mais uma aventura tentar botar a mão na massa. Respirei fundo, e comecei a futucar.

Para mexer no código do Blender, a primeira coisa que temos que fazer é o download do código-fonte. É mais fácil trabalhar no código oriundo da versão oficial, acessível para download no site da Blender Fundation. Uma outra opção é fazer o download do código da versão de desenvolvimento do Blender, o mesmo código que os desenvolvedores modificam diariamente (este código na verdade é bem grande, e não se recomenda baixá-lo a não ser que você precise mesmo).

Read More →