Este blog esta em reforma no momento.

Something is technically wrong

O pesadelo dos twitteiros! Achei um personagem bem interessante (espero não ter problemas em usa-lo).
Afinal, nada melhor doque juntar robos dos anos 60 e 80 com uma imagem atual.
Tive esta ideia em algum dia da semana passada quando o Mr. Twitter caiu de novo, esboçei a malha... e ela ficou parada até hontem :P
Deixei uns toques de ferrugem para ele ficar mais ambientado no cenério.

Tela principal primeiro rascunho

É uma ideia simples, baseada no rodapé do blog.
Cibele em Pose de Lotus, e a esfera de energia com as opções do menu circundando. Claro no ambiênte de render da OpenGL agente pode a busar um pouco mais de buffers e jogar efeitos.
A camera pode ficar avoando pelos ângulos, e a mesh pode ser projetada especialmente para esta tela.

Pensando em SEO

Eu estava muito crente que a maior parte do meu acesso desconhecido se devia à pessoas em busca de tutoriais.
Um estudo bem formulado com o Analytics me permitiu olhar o cérebro do internauta. Estou desesperado pra fazer um curso de Analytics em São Paulo... mas os dois dias de curso mais os 700 contos... estão realmente se mostrando proibitivos.

Devo notar também que perdi um bom período de dados, ao esquecer de migrar os dados do Analytics quanto troquei o domínio ~_~
Mas o fragmento aqui me parece ser bem relevante a enxergar o todo.

Cheguei a conclusão que o conteúdo em sí é realmente a parte mais relevante!
Agrupei as requisições por grupos (em amarelo), e depois comecei a associa-los. Também marquei com estrelas os termos mais consultados.
Bingo!
 O blog se mostra atraente no que anda mostrando, apenas isto, não se vê um game, mas sim a programação e o desenho! E mais uma vez eu confirmo o que os especialistas dizem, o Google já esta sendo usado como "parte da memória pessoal" das pessoas! As vezes a pessoa quer lembrar mas ao ivéz de forçar a mente usa o Google, isto também vale para quem consulta a grafia de palavras no Google. É o "transhumanismo" já nos dias de hoje.

Pena o Analytics ainda não mostrar informações sobre pesquisas de imagens, do tipo "qual a imagem clicada", pelo menos eu tenho as informações do Picasa, infelizmente são informações misturadas pois, as fontes vêm também de fóruns como a PDJ.
Ainda assim me comicho para usar a API do Google para varrer estes números, quem sabe eu consiga também extrair dados consistentes dai.

Me sinto muito feliz hoje!

Na verdade isto que lhes conto ocorreu na terça e não nesta quinta.

Mas chegando em casa e lendo minhas mensagens no DeviantArt eis que encontro isto:
De imediato, senti que era um fake, mas olhei a comunidade e o seu co-fundador é Martin Renold, o desenvolvedor do projeto MyPaint!
Entrei na galeria, e meu desenho até que se encontra junto à umas boas obras.
Ele ficou poucos dias aparecendo na capa, mas ja deu pra animar bastante.

Um detalhe sobre naught101 o fundador do grupo, olhando seu blog pessoal eco101 e seus intereses políticos, me lembrou de imediato um grande amigo, o Mateus com seu blog Somos Carbono, os conteúdos muito se parecem.

Galeria do MyPaint.deviantart.com.

Linkagem gratuita a parte, me lembra muito daquela teoria de que mentes com pensamentos similares se atraem, é mais coerente essa ideia doque coincidências. Acho que se eu jogar um mapa mental com o XMind e agrupar os elementos em comum no grafo devo ter uma surpresa.
Curioso como coisas tão despretenciosas acabam chamando atenção.

E no Mundo off-line
Outra coisa de impacto em minhas realizações profissionais, é ter sido aceito em duas firmas este mes, oque me deu a oportunidade de escolher o melhor caminho (assim espero).
Apesar de ter um pouco mais de grana, ja estou sentindo saudades dos companheiros de equipe de onde eu estava trabalhando. Pois foi um lugar que encontrei pessoas muito legais. Eu nem sairia de la, fosse questões salariais.
A galera la ainda vai receber sua homenagem ^_~

Mas vamos ver noque o tempo se transforma...

Mais alguns progressos Aracte e Hell Lizzard

Semana insana e a próxima sera mais ainda, mas....
Hell Lizzard

SIm, eu não sei escrever Lizzard direito, não sei se é com um Z ou dois  (so me toquei desse detalhe depois de upar pro Youtube).
Bom, de qualquer forma ta ai, alguem se lembra do rascunho que começei semanas atraz? Esta manha sentei e puchei mais poligonos. Ficou com 1.200 e pouco.

Aracne SD Ilustração 2
Gente, essa drider ja foi favoritada 5 vezes no DeviantArt, sem fazer qualquer propaganda dela.
Intaum to fazendo outra ilustração caprichada dela.

Caldeirão da Bruxa
Nossa, editando esta imagem me deu un "dejavu" muito estranho.
 Veja online aqui.

To fazendo o oclusion map na unha mesmo.
E descobri uma coisa, o sistema de "path" (trilho) para a camera é beeeem complicado de se acertar. E programacionalmente falando é mais fácil desenvolver usando paths bezier de 3 ou 4 pontos doque nurbs curves. O Away3D usa paths de 3 pontos, oque me da um "puta" trabalho para tirar os dados do Blender que usa paths de 4 pontos (que são os que eu irei usar no meu sistema de camera do jogo).
Mini tuto de Path na Away3D
import away3d.animators.PathAnimator;
import away3d.animators.data.Path;

private var camPath:Path;
private var camPathAnimator:PathAnimator;
private var time:Number = 0;

var aPath:Array = [
 new Number3D(-433.7,315.5,-109.0),
 new Number3D(-266.1,225.2,-416.4),
 new Number3D( 467.9,071.0,-226.6),
 
 new Number3D(467.9,071.0,-226.6),
 new Number3D(582.3,170.2,-178.0),
 new Number3D(426.6,145.4,388.6)
];
   
camPath = new Path(aPath);
  
var init:Object = { duration:1000,
  lookat:null,
  aligntopath:true,
  targetobject:null,
  offset:new Number3D(0,0,0),
  rotations:null,
  fps:24,
  easein:false ,
  easeout:false
};
camPathAnimator = new PathAnimator(camPath, view.camera, init);

//No enter frame
time = (time +0.01>1)? 0 : time+0.01;
camPathAnimator.update(time);
Baseado no tutorial da Away3D

Flex PixelBender Zend RPG MD2 Away3D Correria Café Cerveja TUDO JUNTO AGORA


Essa semana foi atipica, não parei, corri de um lado pra outro, fui pra São Paulo e voltei correndo, levei trabalho pra casa, to no meu hobby, relembrei Flex, aprendi Pixel Bender, levei a Clarice pra vacinar e aqui estou postando e também preparando meu post de amanha na RPG Vale.

Como devem ter notado na imagem acima estou fazendo umas coisinhas um pouco mais nervosas com flash. Pensei em montar um hotsite em 3D dessa vez, por issu este modele com cara de Budy Pocket... alias confesso que ficou bem podrão mesmo. Talvez se eu organizar o esqueleto direito consiga usar ele para os testes de colizão no terreno do jogo.

Irei inserir mais frames nesta animação, o arquivo MD2 ficou com incríveis 36Kb com 12 frames! Então acho que irei arriscar uns 30.
Uma dica excelente que achei na internet, é a respeito da lista de animações do MD2, você pode criar um arquivo separado definindo os quadro chaves. O formato pede que a primeira linha identifique o arquivo, o resto é uma string e o numero total de frames da animação.
Fica itegralmente assim:

# MD2 Frame Name List
stand 11
run 0
attack 0
pain0 0
pain2 0
pain3 0
jump 0
flip 0
salute 0
taunt 0
wave 0
point 0
crstnd 0
crwalk 0
crattack 0
crpain 0
crdeath 0
death0 0
death2 0
death3 0

Eu tentei mudar o nome das animações, mas começou a dar pau com o Blender 2.49a. Então larguei mão e só zerei a quantidade de quadros. Deu certinho.

Away3D suporta animação por bones dentro do Collada, mas os tutoriais de MD2 etão mais à mão, mas é bom saber que ela tem esse recurso muito mais avançado.
Este foi um dos motivos da escolha da Away3D, ela incorpora muitos recursos que a Papervision3D demora para incorporar. Apesar das ultimas informações que tive dela ela consumir o dobro de RAM que a Papervision, mas isso faz bastante tempo, qualquer duvida procurem alguma analize mais atual.

A pintura foi toda feita no inkscape, achei mais pratico usar um software vetoria, pois um espaço pequeno de 256x256 pixels é complicado de trabalhar.

Uma coisa interesante durante o processo, o png com transparência foi renderizado perfeitamente na away3d. Deu até uma ideia de fazer uma mágia de invisibilidade pra deixar Cibele assim, com os olinhos aparecendo pra dar aparência daquele desenho do PacMan que quando ele comia o fantasma so saiam os olinhos flutuando em bora.

Outra coisa legal é o Pixel Blender, esse recurso é fabuloso. Rodar shaders apartir do player do flash é um recurso extupidamente poderoso. Tem gente estudando o recurso inclusive para manipulação de dados!
Eu tirei este shader lindo de raios de luz deste site (kode80.com), e pretendo usar esse mesmo shader de light-scatering na faze inicial do jogo. A luz atravessando as arvores vai dar uma visão chocante. E é um shader bem simples, me expantei ao analiza-lo.
Pena que rodando no flashplayer o pixelbender, so trabalha na fase processo pixel, o pre-calculo de vertice e matrizes é todo via AS3, mas mesmo assim o resultado é rápido (veja o site dos caras)!!!

Pra quem não conhece pixelbender é o novo recurso adicionado ao player do flash, onde o swf carrega um código pré-compilado em linguagem de maquina, que roda direto no processador da placa de video. O PixelBender é baseado na GLSL que o torna bastante compativel e portavel.

O modelo foi criado com um numero extreamente reduzido de poligos, mesmo porque irei caprichar no cenário. Por sorte o shader não se atrapalha com a transparência.
Outra coisa que irei fazer é adicionar uma segunda layer de render para renderizar o chão com sombras e o horizonte.
Depois irei usar o recurso de paths da Away3D para fazer a camera acompanhar um caminho fixo ao mover o mouse pela cena, oque dara uma visão de angulos muito superior. Esse processo sera usado no game final também.
Irei jogar um pequeno sistema de particulas para fazer a fumaça, tentei fazer com pixelbender, usando outro código da net, mas não mesclou corretamente.
Bom, o objetivo é copiar uma cena como esta:
Creio que vocês não devem ter reparado no background... mas ele esta ali, é so olhar pra esquerda e direita da figura centra. Sei que é dificil :P
Bom, uma vegetação como essa deve ficar excelente na cena.

Os links irão estar flutuando no ar ao longo do path.

Parte 2
Bom, pra não dizer que aproveitem bem meu tempo... inventei de aprimorar o software de visualização 3d dos personagens. Dando um acabamento profissional.

Infelizmente issu acaba implicando em atenção a inumeros e inumeros detalhes que agente nunca repara de inicio. Oque deveria durar uma manhã, comeu o sabado inteiro e parte da manhã de domingo.

Mas ficou legal. Agora você pode inserir comentários, e há uma conexão com o Gravatar, um serviço universal de avatar. Basta digitar ser e-mail e ter um cadastro simples no Gravatar e pronto.
Poderia ter usado o OpenId, pois o Zend tem essas facilidades, mas fiquei com preguiça.
Estou satisfeito com o Zend, apesar de seu vasto tamanho, ele tem recursos na proporção dos seus Megabytes.
Este código no controller transforma a saída em RSS 2.0, simples, e padronizado. Assim além de poder usar ele na aplicação eu posso aproveitar os dados em qualquer outro lugar, inclusive agregadores de feed ^_~
public function indexAction()
    {
 $page = $this->getRequest()->getParam('page',false);//'www.8arte.net/wwpvisualizador';
        $this->view->rss = $this->formatRSS( $page );
    }
    
    protected function formatRSS($dt,$title=false)
    {
     $config = Zend_Registry::get('config');
     $base = $config->rss->base;
     if(!$title) $title = $config->rss->title;
     
     $ens = array();
     $pageNome = 'www.8arte.net';
  foreach( $this->comentarios->listComments($dt) as $com )
        {
         array_push( $ens,
    array(
     'title'   => 'Comentário de '.$com['nome'],
     'author'  => $com['nome'],
     'link'   => 'http://'.$com['pagina_nome'].'/',
     'description' => $com['coment']//$this->formatDescription($com['nome'],$com['web'],$com['coment'])
    )
         );
         $pageNome = $com['pagina_nome'];
  }
  $rss = array(
   'title'  => $pageNome,
   'link'  => "http://$pageNome/",
   'charset' => 'UTF-8',
   'entries' => $ens,
   'author' => 'Marcos Augusto Bitetti (marcosbitetti@gmail.com)',
   'category' => "Comentários",
   'image'  => 'http://www.8arte.net/media/img/rss/rss_wild.jpg'
  );
     
  $feed = Zend_Feed::importArray($rss, 'rss');
  
  return  $feed->saveXML();
    }

O Adobe Flex é muito rápido pra produzir aplicativo... infelizmente pra mim, não ajuda muito, eu acabo perdendo tempo incrementando mais recursos. Mas vale a pena.
private function addComents():void {
    coment_list.removeAllChildren();

    var ld:URLLoader = new URLLoader();
    ld.addEventListener( Event.COMPLETE, addCommentsData);
    ld.load( new URLRequest("http://www.8arte.net/comments/wwpvisualizador") );
   }

   private function addCommentsData( e:Event ):void {
    var ld:URLLoader = e.target as URLLoader;

    var com:Array = new Array();
    //adiciona comentario principal
    var t:TextArea = new TextArea();
    t.percentWidth = 100;
    t.height = 85;
    t.wordWrap = true;
    t.editable = false;
    t.htmlText = '<img align="left" alt="gravatar" height="80" hspace="2" src="http://www.gravatar.com/avatar/aa6003be4294547ab18571dfca3e4522.png" vspace="0" width="80" />Bitetti (autor) Implementação de visualização de personagens do jogo Wild Witch Project.'+
       'Utilizando Adobe Flex 4.0, Zend Framework e Flash Develop.'+
       'Modelos 3D produzidos no Blender, texturas no Gimp, Inkscape e ArtRage2 (licenciado).'+
       'Wild Witch Project sob licenca Creative Commons 3.0 - uso não comercial, atribuição e não derivação.';
    coment_list.addChild(t);
    
    //parse RSS
    var feed:RSS20 = new RSS20();
    feed.parse( ld.data as String );
    ld = null;
    System.gc();
    
    for each( var i:Item20 in feed.items) {
     t = new TextArea();
     t.percentWidth = 100;
     t.height = 85;
     t.wordWrap = true;
     t.editable = false;
     t.htmlText = i.description;
     coment_list.addChild(t);
    }
   }
Este código lê o RSS gerado no Zend e insere os elementos TextArea para cada entrada. Tudo simples, usando as xml syndication lib disponível no google code.
Foi uma boa relembrada de Flex.

Bom, vou voutar à minha correria

Cibele vs Pedobear, uma batalha trash

Nada como não pensar em programação numa manhã de domingo.
Quem quizer comparar com o traço inicial é so ir neste post.

Flickr www.flickr.com/photos/bitetti/4413075605/
DeviantArt http://bit.ly/cWVyTf

Saldo de 2009 - Projeto em baixa

 Triste constatar, mas o progresso esta lento.

Arquivos mestres (blender, png, xcf, svg, audio...)
2672 arquivos - 5.5GB

Total de todos os arquivos sem discriminação (incluindo screenshots, suporte, libs, marketing, docs e lixo)
5288 arquivos - 6.0GB

Média de 400MB por personagem (sculpt com res 5 acima para normalmap)

Código da primeira versão (study):
C++ 2729 linhas (incluindo comentários* e arquivos de cabeçalho)
Lua 1037 linhas (incluindo comentários*)
* eu comento pra caramba!


Periodo de permanencia num contexto (paro um pouco, mecho em outro, depois volto...)
1 semana


progresso dos personagens (%)
CharConceptMalhaAnimaçãoTexturaScript*Audio
Cibele10000000
Aracne1001001000-
Coisa Ruim1000000-
Fada Lime100100300-
Loira do Banheiro900000-
Harpia00000-
Trolls900000-
Gil Gasaper600000-
Velhão500000-
Preto Velho Tarado800000-
Neaderstalore600000-
Monstro do Armário100100000-
Nesgóico100100000-
Crendeuspaldo1000000-
Firefox10010000
(normalmap)
0-
Nerd das Montanhas1000


-
Winderfall10010001000-
Mortos-vivos100100000-
Guarda-chuva100100000-
* - Lua script

Constatação
O cronograma ter explodido até que não foi surpresa, este projeto tomou altas expectativas tanto minhas quanto de quem acompanha.
No começo eu mantive a cota de uma malha por semana. Mas aí vierão os problemas, stress, mulherada enrolada (muito mais stress), desafios no trabalho (stress pra kraio) e por fim meu ritmo de sono que nunca foi constante pirou de vez (hora de ir pro clube da tarja preta). Hoje mesmo enquanto escreve estou sob uma forte dor de cabeça, à espera do efeito do analgésico.

 Concluindo
Mas olhando bem e refletindo ainda tem um porém de esperança: isto foi o start e todo projeto intelectual curva exponencial como a natureza do próprio conhecimento.Enquanto o tempo passa e eu desenvolvo material solido a tecnologia fica cada vez melhor. E ja tenho por exemplo, um esquema de rig pronto pra todos os personagens.