top of page

ANIMAÇÃO do Blender para o Unity

 

NO BLENDER

 

Todos estes elementos foram exportados em separado e com as coordenadas no (0,0,0) para poderem ser remontados no Unity.

image.png

Exportar conteúdo do Blender para o Unity, não foi linear, tendo sido necessário encontrar soluções parar que a orientação da personagem fosse coincidente entre ambos os programas. 

ACTIONS - BLENDER

 

A animação das personagens é feita no Blender, por se dominar melhor esta ferramenta e se conhecer de fio a pavio a sua estrutura de funcionamento. Assim é possível adaptar e aproveitar-se animações de bancos de dados para acelerar a produção, algo que não é possível se fosse feito diretamente no motor de jogo Unity.

Para se exportar estas animações são criadas Actions.

Há vários modos de se exportarem Actions:

 

1 - Criar uma Action, animar e exportar.

 

A desvantagem é que apenas se pode aplicar uma Action de cada vez que se anima uma personagem. Se se tiver duas Actions, ou mais, estas não serão exportadas.

 

2 - Criar uma ou mais faixas NLA (Non Linear Animation).

 

Aqui as animação são passadas para faixas num editor de trechos de animação (Action Editor).

A desvantagem é que o editor pode tornar-se confuso quando houver demasiadas faixas de animação.

 

3 - Aplicar um Fake User para cada Action de modo a não se perder a informação sempre que se fecha e abre a cena.

 

Neste projeto, depois de vários testes, achou-se mais vantajoso optar-se pelo método 3.

image.png
image.png
image.png

Exportação do .fbx do Blender para o Unity:

 

1 - Colocar todas as animações com um FAKE USER para garantir que ficam guardadas no ficheiro Blender;

2- Adicionar todas as actions ao NLA editor (depois pode-se apagar, mas esta ação é necessária por alguma razão);

3 - Selecionar o Rig + a Geometria (garantir que a geometria tem o Apply All Transforms CTRL+A) --> Export --> FBX;

 

4 - Selecionar os parâmetros conforme as imagens abaixo.

 

Nota: há um bug (no Blender v.3.0) que faz com que nem sempre se consiga exportar todas as actions. A solução para este problema está em duplicar a action, sempre que se precisar de exportar.

A versão do Blender (v3.3.1) não permite exportar as actions em condições e por isso não é possível usar o .fbx no Unity.

image.png
image.png
image.png
image.png

NO UNITY

Importaram-se os modelos .fbx e reposicionaram-se os elementos à volta da câmara. Foi preciso testar com os  Quest para se determinar a distância mais confortável para colocar cada objeto.

Problema 1: exportar/importar a personagem animada do Blender para o Unity.

 

Problema no Blender:

As Shapekeys (ou blendshapes) criadas para as personagens tinham alguns bugs que se podiam ver quando se fazia play da animação e se olhava para os valores das blendshapes que passavam de 0.000 para 0.000001  (imagem abaixo à esquerda) em certos frames o que fazia com que a geometria "piscasse" dentro do Unity.

Solução: Em vez de se criar um Driver (add Driver sobre a Blendshape) com um Average Value indicando apenas qual o controlador a influenciar o valor da Blendshape, criou-se algo semelhante, mas com matemática aplicada no processo, para não haver erros no processamento. Assim copia-se (Copy as New Driver) os dados da Location, do eixo do controlador, que nos interessa e cola-se no slider da blendshape. Desta forma, continuamos a trabalhar com uma função Average Value, mas há mais controlo sobre os valores.

Cons: Não se pode usar Contrains sobre este objeto.

BlendshapeProblem.gif
BlendshapeProblem2.gif

Problema 1: (continuação)

Problema no Unity: 

Apesar do problema parecer estar resolvido no Blender, o Unity continua a distorcer a geometria e a alterar as normais da malha.

Isto acontece porque há uma incompatibilidade entre os Drivers do Blender e os dados que são reconhecidos pelo Unity no processo de importação.

Solução: Depois de se testar com sucesso animação das Blendshapes dentro do Unity, chegou-se à conclusão que apenas a animação dos Drivers é que falha. Assim, eliminou-se todo o Rig facial à base de Drivers e resolveu-se animar diretamente nos sliders das Blendshapes.

Cons: Para um animador este processo não é tão intuitivo, nem prático, mas é a única forma de se poder utilizar Blendshapes no Rig.

Poder-se-ia optar por utilizar apenas bones para a deformação da cara (evitando todo este problema), mas conseguir expressões faciais expressivas seria ainda mais desafiante e trabalhoso para o animador.

Extra: para não haver problemas com as normais da geometria deve-se selecionar "NONE" no campo das "BlendShape Normals" na aba de "models" quando se seleciona o modelo dentro da pasta de Assets.

BlendshapeProblem3.gif
image.png

Problema 1: (continuação e solução)

Pensava-se ter resolvido o problema das Blendshapes, mas elas não estão a reagir bem quando importadas para o Unity, por isso optou-se por se fazer uns controladores (bones) para a cara em substituição da técnica das blendshapes.

Passos a seguir:

1 - Para colocar a animação a funcionar dentro do Unity deve-se importar o .fbx para a pasta de projecto. Este .fbx deve ter pelo menos 1 animação já incluída.

2 - Depois, deve-se duplicar o ficheiro de animação que vem dentro do .fbx para se poder ter controlo das suas propriedades, e ativar o Loop, se necessário.Se se quiser adicionar mais animações, basta importante novamente o .fbx, duplicar as actions e apagar o .fbx, pois só vamos aproveitar as actions.

Uma vez resolvido o problema, importaram-se os os modelos. Com os modelos na hierarquia da cena selecionou-se a opção APPLY ROOT MOTION (no componente Animator da personagem) para que os pés das personagens não ficassem a flutuar no ar. Para se controlar os vários clips de actions criou-se uma Timeline.

image.png
image.png

ACTIONS - UNITY

Há 2 métodos para trabalhar com actions dentro do unity: através da Timeline ou através dos Estados.

MÉTODO da TIMELINE

  1.  Importar o .fbx para a pasta do projecto;

  2. Arrastar o .fbx para a hierarquia da cena;

  3. Na pasta do projecto criar uma Timeline e dar-lhe um nome (testeA);

  4. Adicionar um component PLAYABLE DIRECTOR e adicionar essa timeline que se criou;

  5. Adicionar um component ANIMATOR e deixar tudo como default (isto é preciso para a timeline funcionar);

  6. Arrastar o animation clip da pasta de projeto (dentro do .fbx) para a janela da timeline;

  7. Arrastar o objecto animado, que está na hierarquia da cena para o campo do nome do clip correspondente na timeline;

image.png
image.png

Alterar a frame rate: propriedades da janela da timeline --> Frame Rate

MÉTODO dos ESTADOS

  1. Importar o .fbx para a pasta do projecto.

  2. Arrastar o .fbx para a hierarquia da cena.

  3. Na pasta do projecto criar um Animation Controler (animctrlA)

  4. Adicionar um component ANIMATOR e adicionar o controlador que se criou.

  5. Na janela Animator arrastar lá para dentro a action que se quer e ligar os nodes

image.png
image.png

Animation marked as Legacy

Por vezes, quando se extrai a action do .fbx dentro da pasta de projecto do Unity aparece um aviso/erro em que não se pode usar este tipo de animation clips porque estão marcados como Legacy.

Para solucionar este problema, deve-se:

  1.  selecionara action na pasta de projectos e carregar nos 3 pontinhos por cima do Inspector;

  2. Clicar  na opção Debug;

  3. Desativar o quadradinho de Legacy.

image.png
image.png
image.png

Problema 2:

Quando se anima diretamente no Unity (ao se criar um objecto e uma Animation), aparece um erro na timeline "timeline component is disable".

Solução: Se se fechar a janela de Animation este problema desaparece.

Problema 3:

Depois de animar uma luz diretamente no unity ocorreu um erro.

A solução para o erro "AnimationEvent has no function name specified!" é eliminar uma marquinha que aparece no topo da timeline conforme exemplifica este vídeo.

image.png

ANIMAÇÃO do Quill + Blender para o Unity

Constatações durante a implementação da animação feito no Quill no Unity:

 

  • A animação do Quill não deve ser levada para o Blender para se fazerem pequenos ajustes. Estes devem ser feito diretamente no Quill.

  • A informação do Quill é pesada e faz "crashar" muito o Unity.Não há um shader tão compatível (chave na mão) como aquele que se tem no Blender.

  • Foram experimentados o shader fornecido pelo Quill (https://quill.fb.com/assets/QuillShader.shader ) e o shader externo Smoothly-lit VR Vertex Colour Shader for Unity ( https://gumroad.com/watarucg ). Optou-se pelo último por este ter uma reação às luzes.

Problema 4:

Ambos os shaders, apontados acima (Quill shader e Smoothly-lit VR), não tem um playback para os 2 olhos no dispositivo de VR quando ligados ao computador. Estes shaders apenas funcionam na sua totalidade quando a .apk está devidamente intalada e a ser reproduzida nos Quest, na modalidade standalone (sem fios).

Problema 5:

 

A animação feita no Quill e exportada em formato Alembic (.abc) para o Unity funciona quando reproduzida no computador.

Contudo, esta animação não aparece quando se cria uma .apk para se visualizar apenas com o Quest 2.

Isto acontece porque o packadge fornecido pela Unity não é compativel com Android, apenas é compativel com Windows, IOS, Linux e Stadia.

A solução é tentar utilizar .FBX, ou reproduzir a experiência a partir do Windows em vez do Android.

 

Optei pela primeira solução que parece ser mais fiel ao que estava planeado inicialmente.

Exportar FBX do Quill

image.png

O que esta exportaçao faz é transformar cada frame numa geometria única.

 

Isto pode tornar a cena muito pesada, porque em vez de uma única geometria animada (procedural) como no formato Alembic, no formato FBX pode haver 250, ou mais geometrias, dependendo no número de frames da animação.

ATENÇÃO!: É obrigatório haver alguma coisa na 1ª frame. Esta NÃO pode estar vazia.

Passos para importar um FBX com animação do QUILL para o Unity:

  1. Arrastar para a pasta de projeto o fbx do Quill.

  2. Selecionar esse .fbx e no inspector dar um material com um shader especial que vá buscar informação ao Color Space Gamma (opção que se selecionou na exportação no Quill).

  3. O Quill fornece um Shader (não reage a luzes), nem funciona em visão estereoscópica quando está a ser reproduzido a partir do PC, no Unity (apenas funciona depois da .apk ser exportada), fornecido pelo site do Quill, pode ser baixado aqui.

  4. Em alternativa, o Shader "Smoothly-lit VR Vertex Colour Shader for Unity" reage a luzes (mas é pago - 15$), não funciona em visão estereoscópica quando está a ser reproduzido a partir do PC, no Unity (apenas funciona depois da .apk ser exportada). Pode ser encontrado aqui.

  5. Uma vez feito o download deve arrastar-se o ficheiro para a pasta de projeto dentro do Unity e nessa mesma pasta deve criar-se dois materiais (fig1) um com o nome Double Sided e outro Simples.

  6. Uma vez criados os materiais é só arrastar para cima deles o ficheiro do shader e depois ir ao Inspector de cada material e verificar se no material que tem o nome "Double sided" se tem essa opção ativada e o outro não (fig.2).

  7. Em alternativa podemos utilizar um Shader criado por nós que vá buscar as informações às cores dos vértices, também, como nos Shaders do ponto 3. e 4. Para isso basta criar um material (imagem abaixo). A cor não fica tão brilhante como nas outras opções mas funciona em visão estereoscópica, quando reproduzido a partir do Unity.

  8. Depois desse material aplicado no .fbx é só fazer Apply (fig. canto inferior direito).

  9. Arrastar esse fbx da pasta de projeto para a hierarquia.
    (continua)

image.png
image.png
image.png
image.png

Reproduzir animação do FBX do Quill - Abordagem 1


Loop infinito de animação, sem controlo de início e fim.

Depois de se fazerem os pontos anteriores até ao 9.:

  1. Adicionar o Quill Anim Component no Inspector (primeiro instalar o package https://watarucg.gumroad.com/l/unityquillfbx?layout=profile)

  2. Se se fizer play é possível ver-se a animação a acontecer num loop eterno. Contudo não há qualquer hipótese de controlo por parte do artista para poder definir quando a animação começa ou acaba.

image.png

Reproduzir animação do FBX - Abordagem 2

Controlo da animação através da timeline (esta foi a abordagem utilizada em "Noises")

​​

Depois de se fazerem os pontos anteriores até ao 9.:

 

  1. Adicionar uma timeline;

  2. Adicionar uma Control Track na timeline;

  3. Adicionar individualmente cada objeto geométrico (mesh/malha) e definir a sua duração;

  4. Se a duração dos frames/mesh for sempre a mesma, pode-se utilizar o ficheiro Python, desenvolvido pelo meu colega Alexandre Pimentel, que facilita o processo da alteração do tempo de duração de cada elemento:  time_scaler.py (LINK)

  5. Para isso deve abrir-se o ficheiro Python (com duplo clique);

  6. Arrastar para dentro da nova janela o ficheiro da timeline.playable que se tinha criado para esta cena (sempre que se cria uma timeline, cria-se um ficheiro destes);

  7.  Colocar o valor inicial da duração da que esse objeto tem dentro do CONTROL TRACK - consultar o inspector -  keyframe;

  8. Colocar o valor de duração que se pretende;

  9. Colocar o nome da Layer que se deu inicialmente dentro do Quill e que corresponde ao prefixo de cada mesh.

  10. Enter

image.png
image.png
image.png
image.png

Durante a produção (março de 2024) percebeu-se que o formato de exportação Alembic (.abc) não era reproduzivel no Quest, quando não estava ligado ao PC.Por essa razão, optou-se pelo formato de exportação de animação .fbx. Na procura de uma solução que agilizasse este problema, comentou-se no forúm do UNITY, na esperança que alguém já tivesse tive o mesmo contratempo:

 

Em setembro de 2024, Snorulf (um developer), por recriação, criou uma ferramenta que transforma as exportações .abc em malha .fbx, dentro do UNITY:

Este método acabou por não ser utilizado porque já tínhamos adotado a solução do Alexandre Pimentel.

Problema 6:

Ter a mesma personagem repetida em cena, no Unity.

 

A cena  4 da narrativa A tem a personagem em duplicado: uma a subir as escadas e a olhar para cima e outra, virada de cabeça para baixo e pendurada sobre o observador, a olhar para nós enquanto suspira de cansaço e impaciência ao ver a escadaria infinita.

 

A duplicação da personagem trouxe problemas devido ao modo como o Blender nomeia cada objecto. Como o programa não aceita que um objecto tenha o mesmo nome que outro, este acrescenta .001 à frente do nome de todos os objectos em duplicado. Isto torna impossível que se anime uma personagem duplicada e se possa aproveitar a animação com esse modelo.

 

No entanto, se se quiser duplicar a personagem no Unity e apenas aproveitar a action (ficheiro de animação), esta não pode ser aplicada no segundo modelo pois o unity não sabe o que fazer com modelos que considera iguais.

A solução para isto seria exportar um segundo modelo a partir de Blender e exportá-lo (mesmo que não se tenha animado com ele), pois todos os clips de animação irão com o ficheiro.

CHARA_C004_Blender.gif

Problema 7:

A animação na cena de LOADING não estava a ser bem importada.

 

Problema: Por alguma razão os keyframes dos pés das personagens não estavam a transitar corretamente do Blender para o Unity.

 

Solução: Selecionar a opção "Force Start/End Keyframe" quando se exporta o FBX.

image.png
image.png

Problema 8:

Imcompatibilidades nas metodologias de parenting do Blender para o Unity.

 

Problema: Um dos objetos da porta estava num nível inferior hierárquico em relação ao outro objeto (portanto um era parent do outro).

 

Solução: Evitar ter parentescos entre geometrias.

parentproblem.gif

Informações de contato

Doutorada em Arte Multimédia,

pela Faculdade das Belas-Artes

da Universidade de Lisboa

 

Mestre em 3D Computer Animation, pela Bournemouth University

 

Erasmus em Animation, Games 
na Southampton Solent University

 

Licenciada em Arte Multimédia,pela Faculdade das Belas-Artes

da Universidade de Lisboa

  • Instagram
  • LinkedIn

Mensagem enviada!

bottom of page