# Animações

Animação é a arte de dar vida às coisas. E não há melhor maneira de deixar sua scene mais animada do que adicionar algumas animações aos seus modelos 3D.

Há algumas maneiras de fazer isso: por meio de **object animation**, por meio de um **rig (animação esquelética)**, ou usando **shape keys (animação de morph target)**.

**Object animation** é melhor para modelos simples, como uma bola quicando, um globo girando ou uma cadeira flutuando, e não precisa de uma armature. É importante mencionar que object animation é diferente de **vertex animation**. Em object animation, o modelo será animado como um todo, enquanto em vertex animation cada vértice do objeto pode ser animado separadamente.

**Shape keys (também conhecidas como morph targets ou blend shapes)** são uma forma de vertex animation que **é suportada pelo engine da Decentraland**. Elas são especialmente úteis para expressões faciais, lip sync, ou qualquer deformação que seja difícil de alcançar apenas com bones. Animações de shape key incorporadas em um arquivo glTF/GLB serão reproduzidas no mundo assim como animações esqueléticas ou object animations.

Se você tiver um modelo mais complexo, como uma pessoa, criatura ou maquinário, então você vai precisar de um **rig**. Um rig não é nada mais do que um esqueleto digital que vai mover e deformar a mesh. O processo de vincular a mesh ao esqueleto é chamado de Skinning, onde você define qual bone vai afetar cada grupo de vértices e quão forte será essa influência, garantindo que o modelo se deforme da melhor maneira possível.

Para qualquer um dos métodos, porém, todas as animações de um modelo 3D devem ser incorporadas dentro do seu *glTF* , já que você não pode referenciar animações em arquivos separados.

## Criando Uma Animação

Veja como criar animações usando o Blender.

### Object Animation

* Certifique-se de que você tenha a aba ***Dope Sheet*** > ***Action Editor*** aberta e clique em ***New*** para adicionar um clipe de animação.
* Renomeie-o como achar melhor e certifique-se de ativar ***Fake User*** (o ícone de escudo) para que sua animação seja salva.
* Defina um keyframe no primeiro frame selecionando o objeto e pressionando ***I***. Depois mova o objeto, gire-o ou altere sua escala e, em outro frame na timeline, pressione ***I*** novamente para definir outro keyframe com os transforms atuais.
* O frame final da animação deve ser o mesmo que o primeiro, então basta copiar o primeiro frame e colá-lo no último.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-efdf5b9c23ab8b9fe1c9dba379a9f19927fca580%2F01_object_animation_02.gif?alt=media)

*Criando um clipe de animação e adicionando keyframes.*

### Rig Animation

Para uma rig animation, você vai precisar de uma armature. Se quiser fazer isso por conta própria, veja [Create a Rig](https://www.notion.so/686e6f59a1604585b059f990a36b2d55) para instruções sobre como configurar uma armature consistente.

Quando o rigging estiver pronto e o Skinning tiver boas deformações, você estará pronto para começar sua animação! O processo é muito semelhante ao de Object Animation, mas em vez de fazê-lo em ***Object Mode***, você o animará em ***Pose Mode***.

* Vá para ***Pose Mode*** e certifique-se de que você tenha o ***Dope Sheet*** > ***Action Editor*** aberta e clique em ***New*** para adicionar um clipe de animação.
* Renomeie-o como achar melhor e certifique-se de ativar ***Fake User*** (o ícone de escudo) para que sua animação seja salva.
* Com o mouse sobre o ***Viewport***, pressione ***A*** para selecionar tudo e então ***I*** para definir um keyframe para toda a armature.
* Vá para um frame diferente na timeline e manipule o bone como quiser para obter a pose desejada. Você pode alterar a location, rotation e scale de um bone dependendo de como você configurou seu rig.
* Quando você tiver um bom resultado, defina outro keyframe para toda a armature. Continue fazendo isso até terminar sua animação. Lembre-se de deixar o primeiro e o último frames iguais se a animação for em loop.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-56d38d4203ef345849a93c8bfe86ec7c517342cd%2F02_rig_animation_02.gif?alt=media)

Se você é novo no processo de animação, confira este tutorial com algumas dicas legais para iniciantes:

[![Video Preview](https://img.youtube.com/vi/-iWslh4uQIk/maxresdefault.jpg)](https://youtu.be/-iWslh4uQIk)

## Skinned Animations vs Transform Animations

**As transform animations normalmente são melhores do que as skinned mesh animations em termos de performance porque envolvem menos overhead em termos de recursos computacionais necessários para exibir a animação.**

A animação de skinned mesh envolve usar uma mesh com um skeleton de bones que são weighted aos vértices da mesh. O skeleton é animado, o que por sua vez anima a mesh. Esse processo pode ser bastante intensivo em termos computacionais, especialmente quando há um grande número de vértices para animar.

As transform animations, por outro lado, envolvem animar diretamente as propriedades de transform de um objeto (como sua position, rotation e scale). Isso pode ser feito com menos recursos computacionais do que a animação de skinned mesh, já que normalmente há menos propriedades de transform para animar do que vértices em uma mesh.

Além disso, as transform animations muitas vezes podem ser pré-calculadas e armazenadas em um formato mais compacto, como dados de keyframe, que podem ser acessados e reproduzidos rapidamente sem a necessidade de cálculos intensivos em tempo real.

No geral, embora a animação de skinned mesh possa produzir animações mais detalhadas e realistas, as transform animations costumam ser preferidas para aplicações em que a performance é crítica, como videogames.

## Criando e Exportando Vários Animation Clips

Você pode ter tantos animation clips quantos quiser para seu modelo. Você pode ver como criar, navegar e excluir animações em [esta seção aqui](https://www.notion.so/5e962e5d54a24bcb9b906748007eb4cc).

No vídeo abaixo, você vai aprender como exportar várias animações do Blender em um único arquivo GLB.

[![Video Preview](https://img.youtube.com/vi/YxAB4bujO_w/maxresdefault.jpg)](https://www.youtube.com/watch?v=YxAB4bujO_w\&ab_channel=Decentraland)

## Exportando Muitas Animações como Uma Só

Ao contrário de uma animação esquelética, onde você pode fazer rig de vários objetos e combinar suas animações em um único animation clip, em object animation você não pode fazer isso. As animações serão exportadas separadamente e apenas um objeto será reproduzido por vez. Uma solução para isso é mesclar muitas animações em uma só, para que você tenha um animation clip com todos os objetos se movendo ao mesmo tempo.

Para fazer isso, envie para a ***Nonlinear Animation Track*** a animação de cada objeto, como mostrado abaixo.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-202a85c0ab83178cd4cab88cd54cea29d5741928%2F03_object_animation_push_down_02.gif?alt=media)

*Envie a animação de cada objeto para a NLA Track.*

Depois que todas as animações estiverem listadas no NLA Editor, selecione todos os objetos, vá para **File > Export > glTF2.0**. Expanda Include e marque Selected Objects. Expanda Animation, expanda Animation novamente e desmarque **Group by NLA Track**. Você pode renomear o animation clip em Merged Animation Name e então basta pressionar **Export glTF 2.0**.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-07d1d6ede0e3413282e94383abfc8f51cedfc722%2F04_export_single_animation_clip.png?alt=media)

*Settings para exportar várias animações como uma só.*

Tenha em mente que isso só vai funcionar se os objetos tiverem apenas uma animação cada. Se os objetos tiverem vários animation clips, é melhor exportá-los separadamente.

{% hint style="info" %}
**💡 Dica**: Em vez de criar suas próprias animações, você também pode baixar animações genéricas e aplicá-las ao seu modelo. Por exemplo, para personagens 3D com características humanas, você pode baixar animações gratuitas ou pagas de [Mixamo](https://www.mixamo.com/#/).
{% endhint %}

## Sampling

Às vezes, seu arquivo de animação pode acabar ficando pesado demais devido à quantidade de animações ou à combinação de animação+modelo.

Sampling é uma boa maneira de otimizar a animação. A sampling rate vai definir com que frequência um keyframe será baked na animação. Por exemplo, se a sampling rate estiver definida como 2, isso significa que um keyframe será criado a cada dois frames. Uma sampling rate de 3 vai baking um keyframe a cada três frames e assim por diante. Quanto maior a sampling rate, mais leve será o arquivo.

A desvantagem, porém, é que a animação começará a ficar cada vez menos fluida, já que perde alguns keyframes importantes (eles são distribuídos pela animação de forma desigual). Também é importante notar que **sampling NÃO é dividir o número de frames da animação pela sampling rate**.

Normalmente, uma **sampling rate de 2 ou 3** vai resolver. Esses números podem otimizar a animação sem comprometer a qualidade.

Você pode encontrar a ***Sampling Rate*** nas export settings, em ***Animation***.

![](https://2402076176-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoPnXBby9S6MrsW83Y9qZ%2Fuploads%2Fgit-blob-5bb9203e0a74492dfa68b1c7d3596c39baf62f95%2F05_sampling_rate.png?alt=media)

{% hint style="info" %}
**💡 Dica**: Se o número de frames da animação puder ser dividido pela sampling rate, isso é ótimo! Significa que o frame final será baked, preservando a transição do final para o início da animação.
{% endhint %}

## Implementando Animações

Este documento cobre como adicionar animações a um modelo 3D. Veja [**handle animations**](https://docs.decentraland.org/creator/development-guide/3d-model-animations/) para instruções sobre como ativar e lidar com animações em uma scene.

## Melhores Práticas para Animações

* Mantenha a armature o mais simples possível, criando bones apenas para as partes do modelo que você pretende animar. Bones podem afetar a performance, então certifique-se de adicionar apenas o que realmente for necessário.
* Se a animação for entrar em loop na sua scene, certifique-se de que a pose final seja idêntica à inicial para uma melhor transição.
* Nunca deixe um personagem sem animação, mesmo que ele não esteja realmente fazendo nada. Crie uma animação "idle" para quando o personagem estiver parado. A idle pode incluir movimentos sutis como respirar e talvez olhares ocasionais.
* Não deixe bones sem pose, como mãos, dedos, cabeça ou pescoço. Detalhes são realmente importantes em uma boa animação e um movimento rígido só a tornará menos crível.
* Evite keyframes demais, a menos que seja extremamente necessário. Quanto mais keyframes você adicionar, maiores as chances de ter uma má interpolação e uma animação mais pesada.
* Selecione todos os seus bones (incluindo os que deformam) e defina um keyframe nos primeiros e últimos frames da sua animação. Isso evitará bones sem informação, fazendo com que uma animação afete a outra involuntariamente.
* Certifique-se de que seu arquivo tenha apenas uma armature quando você o exportar. Ao importar animações, uma armature também será importada junto. Todas as animações devem ser executadas pela mesma armature base, então delete tudo o que você não precisar.
* Sempre renomeie seus bones e animações. Mantenha tudo organizado!
* Ao exportar o *glTF* modelo, confirme que você está exportando todos os objetos e animações. Alguns exporters exportarão apenas o ***currently selected*** por padrão.
* Depois de exportar o modelo, inspecione-o no [Babylon Sandbox](https://sandbox.babylonjs.com/) e verifique se todas as animações estão funcionando e estão nomeadas como esperado.
