Blender camera tracking + Python Photogrammetry Toolbox

For who speaks English, please read here: http://arc-team-open-research.blogspot.com.br/2012/11/blender-camera-tracking-python.html

Recentemente participei da BlenderPRO 2012, uma conferência nacional sobre o Blender 3D onde palestrei, ministrei um curso e reencontrei grandes amigos.

Escrevo sobre esse evento por que lá tive o prazer de conhecer grandes artistas nacionais e internacionais, dentre eles o Sebastian Koening, desenvolvedor do camera tracking do Blender e um dos integrantes do grupo que criou o curta Tears of Steel. O que foi bastante motivador para que eu pensasse em efetivamente fazer algo com tracking no Blender.

Grosso modo, com o camera tracking, nós abrimos um vídeo dentro do Blender e através da captura de alguns pontos, podemos reconstruir o movimento da câmera virtual em três dimensões.

Vídeo criado com os dados importados de outra cena contendo camera tracking

Com isso, é possível inserir objetos na cena, dando a impressão de que eles de fato estão lá!

Na verdade eu e dois amigos (o Teo Macedo e o Daniel Ludwig) já haviamos feito um trabalho com essa tecnologia, nos idos de 2010, para a minha palestra na Latinoware de então, mas naquela oportunidade eu usei o Voodoo, um camera tracker que apesar de ser gratuito não é livre.

Motivações

A ideia de usar o camtracking veio em uma caminhada enquanto eu e uns camaradas tiravamos fotos na frente dos ministérios em Brasília. No Museu Histórico apoiava-se o busto do ex-presidente Juscelino Kubitschek. Imaginei que seria muito legal se eu fizesse um track de uma cena, onde aparecia aquele lugar e de repente o busto tomava vida, piscando aos transeuntes e assoprando na direção dos cabelos para que as pombas saíssem de cima deles.

Infelizmente, a gravação que meu amigo fez daquela cena acabou tendo alguns probleminhas de distorção, o que impossibilitou o seu uso para esse fim.

Mas a ideia permaneceu na mente, e assim que voltei, me dediquei aos estudos dessa fantástica tecnologia.

No caso do Juscelino, eu não modelaria o seu rosto do zero. Minha intenção essa fazer uma reconstrução da cena via Python Photogrammetry Toolbox, ou seja, eu escanearia usando imagens, ou mesmo o vídeo base do tracking.

Ao usar o vídeo base o trabalho se tornaria mais fácil, pois a textura estaria quase pronta e a iluminação estaria configurada com poucos comandos. Como assim? Eu explico.

Frame do vídeo original com o vaso de cimento

Assim que cheguei em casa, procurei uma situação de tracking que envolvesse um objeto “complexo”. A coisa mais complexa que encontrei no quintal da minha casa foi um vaso de cimento com motivos florais.

Para facilitar a vida do tracker e da reconstrução via frames, coloquei o vaso de cabeça para baixo.

Fiz uma filmagem rápida focando o vaso e não mostrando a linha do horizonte, assim ficaria mais fácil configurar a cena depois.

Converti o vídeo em uma sequência de imagens e enviei ao Python Photogrammetry Toolbox (GUI) no Linux ArcheOS, que eu rodo dentro do Virtualbox.

Nuvem de pontos criada pelo PPT importada no Blender

O grande barato do “escaneamento 3D por fotografias” via Bundler, é que o Blender importa (via script) os dados da reconstrução, posicionando as fotos “rente” a câmera, facilitando muito o processo de mapeamento.

É possível fazer uma reconstrução com qualidade excelente, como no caso do crânio da criança Taung. Mas naquele caso quem fez a reconstrução foi a equipe Arc-Team da Itália, que entende bem do processo. Como eu usei uma câmera de pouca qualidade e lancei mão da sequência MPEG da qual gravei, pude reconstruir apenas uma parte com o algotirmo Ball Pivoting dentro do Meshlab. Felizmente foi o suficiente para reconstruir o modelo com a precisão necessária.

O fato de ter o modelo reconstruído através de algoritmos, faz com o o processo seja o menos subjetivo possível. Quem trabalha com modelagem 3D sabe que usar fotos de referência pode induzir o artista ao erro, isso por que as fotografia sempre tem a deformação da perspectiva, o que não acontece com o modelo reconstruído. Uma vez que o vaso foi finalizado, era chegada a hora de inserir ele na cena trackeada.

Não há muito o que escrever acerca do “trackeamento” da cena. Para aqueles que desejam aprender, existe um excelente videotutorial em inglês do Andrew Price que ensina a fazer isso.

Vaso modelado em 3D inserido sobre o vaso original

Acima temos a imagem do vaso 3D que foi posicionado sobre o vaso original da gravação. O fato de ele ter sido reconstruído usando como base a gravação fez que que o modelo batesse quase perfeitamente com o original. Além disso, as imagens que serviram como base para a textura já estão com a configuração de iluminação praticamente pronta. A pergunta é, por que modelar o objeto inteiro e texturizá-lo, já que grande parte das reconstruções desse tipo são feitas apenas com o objetivo de servirem como máscara?

Não sou expert nessa área, mas imagino que a reconstrução completa ajuda e muito na hora de texturizar o objeto, fazendo com que ele fique mais realista. Além disso, podemos deformar o modelo, de modo a expandir as potencialidades dele, como aparece na imagem acima, onde o vaso com motivos florais se converteu em uma nave expelidora de seres esféricos. É um exemplo tolo, mas ilustra bem o que pode ser feito com essa tecnologia.

Para finalizar, é justo dizer que o objetivo inicial foi alcançado. Fazer um tracking com o Blender, reconstruir parte da cena com a própria filmagem e expandir as potencialidades das ferramentas de código livre.

Esse foi apenas um teste, caso sobre um tempo ou a inspiração bata à porta insistentemente, outros desses posts surgirão mais lapidados e plenos de referência.

Grande abraço e até o próximo!


One thought on “Blender camera tracking + Python Photogrammetry Toolbox

  1. Alex

    Acredito que uma aplicação interessante desta tecnologia seja a integração com impressoras 3D, o que possibilitaria a cópia de objetos tridimensionais para produção em escala.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Spam Protection by WP-SpamFree