> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/creator/content-creator-pt/wearables-e-emotes/emotes/creating-emotes.md).

# Criando Emotes

Esta documentação abordará as especificações do arquivo, o básico da animação no Blender, a forma correta de exportar um Emote e como importá-lo no Builder.

{% hint style="info" %}
**💡 Dica**: Instale o [plugin Decentraland Tools Blender](https://extensions.blender.org/add-ons/decentraland-tools/). Ele inclui várias funções úteis para ajudar você a editar e exportar modelos 3D, wearables e emotes.
{% endhint %}

#### Tabela de Especificações da Animação

| Taxa de quadros              | 30 fps                                  |
| ---------------------------- | --------------------------------------- |
| Comprimento máximo           | 10 segundos (300 quadros)               |
| Animações por arquivo        | 1                                       |
| Formato de exportação        | .glb                                    |
| Taxa de amostragem           | 1 por padrão (2 ou 3 se necessário)     |
| Tamanho máximo do arquivo    | 1 MB                                    |
| Distância máxima da animação | 1 metro (frente/trás, esquerda/direita) |
| Altura máxima da animação    | 4 metros                                |

Você pode encontrar uma explicação mais detalhada das especificações de animação [**abaixo**](#the-animation-specifications).

### **Recursos**

Esta documentação explica a configuração do Rig 1.0, seus controles e recursos.

[Decentraland Blender Rig](https://github.com/decentraland/docs/blob/main/creator/images/emotes/Avatar_File.blend)

{% hint style="info" %}
Se você estiver usando Maya, você pode baixar este [Maya Rig](https://github.com/decentraland/docs/blob/main/images/emotes/DCL_Maya_Rig.ma) e [picker](https://github.com/decentraland/docs/blob/main/images/emotes/emoteAvatar.pkr) fornecidos por [SparkleStudios](https://www.sparkles.studio/) ❤️.
{% endhint %}

## **Antes de começar**

### **Taxa de quadros**

Antes de começar, é importante verificar a taxa de quadros. As animações do Decentraland devem ter uma taxa de quadros de 30 fps. O arquivo do rig fornecido provavelmente já vem configurado assim, mas como o valor padrão do Blender é 24 fps, é melhor conferir antes de começar (uma taxa de quadros incorreta afetará a velocidade da animação). Essa opção pode ser encontrada em Output Properties (o ícone da impressora), em Format, como mostrado abaixo:

![Certifique-se de que a taxa de quadros esteja definida para 30 fps antes de começar.](https://raw.githubusercontent.com/decentraland/documentation-creators/main/images/emotes/framerate.png)

Certifique-se de que a taxa de quadros esteja definida para 30 fps antes de começar.

### **Pose Mode**

No Blender, um rig pode ser visualizado em três modos diferentes: Object Mode, Edit Mode e Pose Mode. As animações só podem ser feitas no Pose Mode (nesse modo, os controles têm cores). Com o rig selecionado, você encontrará essa opção em um menu suspenso, no canto superior direito.

![Mudando para Pose Mode.](https://raw.githubusercontent.com/decentraland/documentation-creators/main/images/emotes/changing_pose_mode.gif)

Mudando para Pose Mode.

### **Interface para Animações**

No arquivo do rig, além das duas janelas para o viewport (vista frontal e lateral), há mais três na parte inferior: ***Graph Editor***, ***um Dope Sheet***, e um ***Timeline***.

* ***Graph Editor***: Neste editor, é possível editar as curvas de animação de cada propriedade de transformação dos controles selecionados. Essas curvas mostram como a interpolação está sendo calculada e podem ser editadas para alcançar o efeito desejado na animação. Tanto aqui quanto no dope sheet, a ferramenta ***Only Show Selected*** está ativada, o que significa que ela incluirá apenas os canais relacionados ao controle selecionado. Isso pode ser ligado e desligado simplesmente clicando no ícone da seta.
* ***Dope Sheet***: Aqui você pode editar os keyframes. É também aqui que você pode criar novas animações ou percorrer as várias criadas. Lembre-se de que, para ter acesso à animação, o ***Action Editor*** precisa estar selecionado. Essa opção fica logo ao lado do *Dope Sheet* ícone, em um menu suspenso.
* ***Timeline***: É aqui que ficam a timeline e os controles de reprodução. Aqui, o ***Auto Keying*** está ativado, o que significa que toda vez que um controle é manipulado ele cria automaticamente um keyframe. Você sempre pode desativar essa função clicando no ponto ao lado dos controles de reprodução.

Com esta área de trabalho, você tem tudo o que precisa para começar a animar!

![](/files/375779a33a0e771c4d27e52eb5bc25b311983525)

Estas são as janelas inferiores. A de cima está no ***Graph Editor,*** a do meio no ***Dope Sheet,*** e a de baixo é a ***Timeline.*** A seta vermelha de cima mostra a ***Only Show Selected*** ferramenta e a de baixo mostra a ***Auto Keying***.

{% hint style="info" %}
**💡 Dica!**

Como o Blender é altamente personalizável, este também é um bom momento para configurar o layout que melhor se adapta a você, adicionando, ajustando ou removendo janelas. Cada animator tem suas próprias preferências, então sinta-se à vontade para editar o layout como quiser!
{% endhint %}

## Começando

#### **Pose Inicial**

No arquivo do rig fornecido, já existe uma action, a ***Starting\_Pose***. Considerando que todas as ações do avatar começam a partir da pose idle, **nós realmente incentivamos que você comece sua animação a partir dessa pose e também a use novamente no último frame**. Isso fará uma transição melhor de Idle para Emote e uma animação mais fluida.

{% hint style="info" %}
**💡 Dica!**

Se você quiser fazer uma animação em loop, não precisa começar a animação a partir da Starting Pose. Sinta-se à vontade para usar a pose que fizer mais sentido na sua animação!\*\*
{% endhint %}

**Área de animação**

No arquivo do avatar fornecido, você encontrará uma collection chamada ***Animation\_Area\_Reference***. Ela consiste em três objetos que ajudarão visualmente a definir os limites da animação: ***Animation\_Area\_Reference***, ***Ground\_Reference*** e ***Root\_Animation\_Area***.

* Animation\_Area\_Reference é um cubo 4x4, que é a caixa delimitadora. A mesh do avatar e os props devem permanecer dentro desta área durante toda a animação. Os props podem ser movidos livremente, desde que permaneçam dentro da área do cubo.
* Ground\_Reference é um plano fornecido para ajudar a verificar se há penetração no chão durante a animação. Ele também contém informações importantes: o círculo menor, que tem um diâmetro de 2 metros, define a área dentro da qual a root do avatar pode ser movida. Isso significa que, no chão, o avatar só pode se mover 1 metro em cada direção: frente, trás, esquerda e direita.
* Root\_Animation\_Area é um cilindro que define a área dentro da qual você pode mover a root/centro de gravidade do avatar (CTRL\_Avatar\_UpperBody ou Avatar\_Hips). O cilindro tem 4 metros de altura, o que significa que a root pode subir até o máximo, desde que nenhuma mesh fique fora da caixa delimitadora. As pernas, braços e outras partes do corpo do avatar podem ficar fora do cilindro, desde que nunca saiam de Animation\_Area\_Reference.

![Referência da área de animação.](/files/086dfd1f848fa3109068d352a82a407003d0d36a)

Resumindo, o avatar pode se mover para a direita, esquerda, frente e trás, desde que a root permaneça dentro do cilindro, o que significa 1 metro em qualquer uma das quatro direções.

![Movimento do avatar.](/files/82e284609b5e5d97cdea4cf2c8a7197c0754941e)

Quanto à altura, ela pode subir até o máximo (4 metros) desde que o avatar permaneça dentro da caixa delimitadora. Abaixo estão alguns casos de altura do avatar feitos corretamente (corpo inteiro dentro da caixa delimitadora) e alguns feitos incorretamente (mesh fora da caixa delimitadora).

| ![](/files/efb6be0fe3d530987825f15184f7db8a41794e7f) | ![](/files/1bf9516cbe89ae47bd5be292d7b03490ee86cd5e) |
| ---------------------------------------------------- | ---------------------------------------------------- |

| ![](/files/49fdb0476a9f857ac593d99c554a7f13327bcf77) | ![](/files/701558fa267531c863caf09ee08ae77ca26d23bb) |
| ---------------------------------------------------- | ---------------------------------------------------- |

![](/files/6100464529a44d046754dc4df178b1c24d35baff)

Aqui estão alguns exemplos de emotes que estão dentro dos limites da área de animação.

| ![](/files/383cc5236eb646e925a866a6a88c8bb2ac8efee9) | ![](/files/cfb80ccc5f84390edfdbcf611caa99083cdf6550) |
| ---------------------------------------------------- | ---------------------------------------------------- |

{% hint style="info" %}
**💡 Atenção!**

Cuidado com esses limites, porque ultrapassá-los pode causar problemas de jogabilidade.
{% endhint %}

## **Criando uma Animação**

O arquivo .blend já vem com um clipe de animação pronto para ser editado: *StartingPose\_Avatar*. Você pode duplicar e renomear esse clipe de animação como achar melhor. Não há necessidade de criar um do zero!

Na *Browse Action* seção, basta clicar no botão ***Create A New Action*** para duplicar a animação atual. Para renomear o clipe, basta clicar no texto e digitar outro nome.

O Belnder 4.4 introduziu *Slotted Actions*, o ícone à direita da *Browse Action* seção das versões anteriores. Não há necessidade de mexer nisso se você estiver criando um emote sem prop, então pode deixá-lo como está. Se estiver animando o avatar, certifique-se de que a slotted action seja Avatar\_Animation.

![](/files/4f7d104a8c509b38516b39c65eafc3a901b9a4f6)

Crie uma nova animação duplicando a existente ou clicando em ***Unlink Action*** e depois em ***New***.

### **Navegando e Excluindo Animações**

No Blender, você pode ter várias faixas de animação no mesmo arquivo. É possível navegá-las clicando no menu suspenso Browse Action. Todas as animações com um F (Fake User) serão salvas. Para excluir uma animação, pressione Shift no teclado e clique no X. Depois disso, a animação mostrará um 0 ao lado, o que significa que ela será excluída na próxima vez que você fechar o Blender ou reabrir o arquivo.

![](/files/94d0efe47b30e75cbf927886e3df1e11b4fc5f14)

Navegando pelas animações: as que têm um F serão salvas, e as que têm 0 serão excluídas.

Outra forma de excluir animações sem precisar recarregar o Blender é alterando o Display Mode de View Layer para Blender File. Expanda Actions e exclua qualquer animação indesejada clicando com o botão direito nelas e selecionando Delete.

![](/files/613e93313c0fcbce49ccb332bf8a7ed26b45326f)

Você pode excluir animações diretamente de Blender File em Display Mode no outliner.

{% hint style="info" %}
**💡 Dica!**

Não edite sempre a mesma faixa de animação. Antes de fazer grandes mudanças, apenas duplique a animação. Assim você terá uma versão de backup caso se arrependa de excluir ou alterar algo. Essa também é uma boa maneira de acompanhar o progresso feito até agora!
{% endhint %}

![](/files/ca6e0a17ebfadea79c42ef67d8294a024a896042)

Duplicando clipes de animação.

### **Nomeação**

**O nome de uma animação deve começar com letra maiúscula e, se tiver mais de uma palavra, as palavras devem ser separadas por \_.** Não use espaços nem caracteres especiais. Aqui estão alguns exemplos de nomeação:

* Snowfall
* Rainbow\_Dance
* Throw\_Money
* Talk\_To\_Hand

### **Overrides de Emote**

Overrides de Emote acontecem quando os deform bones não têm um keyframe definido em um dos parâmetros. Sem um keyframe, esse bone não terá a informação de onde deveria estar, de quanto foi rotacionado e escalado, deixando esse canal aberto. A consequência é que, se você tocar um emote no world e depois disparar o seu enquanto o anterior ainda estiver tocando, as informações de localização, rotação e escala serão sobrescritas pelo emote anterior, o que causará uma combinação dos dois. A menos que isso seja feito de propósito, isso afetará sua animação, às vezes com um resultado divertido, mas outras vezes deixando o emote completamente bagunçado. Abaixo está um exemplo de override de emote.

![](/files/c734cc91c3ac617e1fc599f6b18d63305e698d41)

Para evitar isso, selecione todas as layers com bones nelas (que podem ser encontradas em ***Object Data Properties*** > ***Skeleton*** > ***Layers***). Então, em ***Pose Mode***, deixe o cursor da timeline no primeiro frame da sua animação e, com o mouse em ***Viewport Display***, pressione ***A*** para selecionar tudo. Em ***Graph Editor***, clique duas vezes no ícone ***Eye*** ao lado do canal da armature para tornar todos os canais visíveis. Com todos os bones selecionados, pressione ***I*** para definir um keyframe. Faça o mesmo para o último frame.

**Certifique-se de selecionar os deform bones, isso é especialmente importante!** Os deform bones podem ser encontrados na última layer inferior e são mostrados como bones verdes no ***Viewport***.

![](/files/dcb2d7dbb2225cf1f411ed1c6529ab284aae535c) Definir keyframes em todos os bones nos primeiros e últimos frames previne overrides de emote.

## **As Especificações da Animação**

### **A Duração da Animação**

A duração máxima de uma animação é **10 segundos** ou **300 frames**. Lembre-se de definir keyframes das propriedades de cada controle no primeiro e no último frame.

{% hint style="warning" %}
⚠️ Os canais com visibilidade desativada no Graph Editor não terão keyframes, não serão excluídos nem mesmo serão mostrados no Action Editor. A menos que isso tenha sido feito de propósito, preste atenção extra à visibilidade.
{% endhint %}

![](/files/e3add127973befee5d423af06a4cb8f6179818ec)

Torne os canais visíveis antes de definir keyframes!

### **Número de Animações**

Se for um emote padrão (sem prop), o arquivo exportado só pode ter uma animação. Para emotes 2.0, você pode ter um clipe para o avatar e um clipe para o prop. Se animações foram duplicadas durante o processo, certifique-se de excluí-las todas antes de exportar. Mantenha apenas a versão final. Emotes em sequência que precisam de muitas animações para funcionar (action start, action loop e action end) não são suportados no momento.

### **Formato**

As animações devem ser exportadas como .**GLB**. O arquivo só pode conter o skeleton em deformação e a animação. **Mesh, controls e qualquer outro objeto não devem ser exportados**. Mais detalhes sobre como exportar podem ser encontrados [**abaixo**](#exporting).

### **Amostragem**

Como constraints não podem ser exportadas, a única maneira de exportar o clipe de animação é fazendo baking dele, o que significa que as posições, rotação e escala de todos os deform bones serão definidas com keyframes em cada quadro da animação. Se o clipe for muito longo, como até 300 quadros, ele terá 300 keyframes após a exportação e, quanto mais keyframes houver, mais pesado o arquivo ficará.

A amostragem é uma boa maneira de otimizar a animação. A taxa de amostragem definirá com que frequência um keyframe será baked na animação. Por exemplo, se a taxa de amostragem for definida como 2, isso significa que um keyframe será criado a cada dois frames. Uma taxa de amostragem de 3 fará o baking de um keyframe a cada três frames e assim por diante. Quanto maior a taxa de amostragem, mais leve 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 de maneira desigual pela animação). Também é importante notar que **a amostragem NÃO está dividindo o número de frames da animação pela taxa de amostragem**.

Normalmente, uma **taxa de amostragem de 2 ou 3** dá conta do recado. Esses números podem otimizar a animação sem comprometer a qualidade.

{% hint style="info" %}
**💡 Dica!**

Se o número de frames da animação puder ser dividido pela taxa de amostragem, isso é ótimo! Significa que o frame final será baked, preservando a transição do fim para o começo da animação.
{% endhint %}

### **Tamanho do Arquivo**

O tamanho máximo do arquivo é **3 MB**. Se o arquivo ficar acima disso após a exportação, tente verificar se a mesh não foi exportada por acidente ou se a animação não ultrapassa 10 segundos. Se ainda estiver acima de 3 MB, tente experimentar com a Taxa de Amostragem, pois valores mais altos melhoram a otimização.

Se o emote contiver quaisquer modelos 3D adicionais, as texturas desses modelos não podem exceder o tamanho de 1024 pixels.

## **Exportando**

Como queremos que apenas a armature e a animação sejam exportadas, desligue a visibilidade da mesh e de qualquer objeto que não seja a armature antes de exportar, como mostrado abaixo:

![](/files/f6306c7448038425cf94602ee0f0dcf494ca8ab0)

Desligue a visibilidade da mesh antes de exportar!

Para exportar, vá para *File* > *Export* > *glTF2.0 (.glb, .gltf)*

![](/files/ed6602e08d7520190b4c25febd4ed6420e3bdbe2)

Nas configurações de exportação, expanda Include e em Limit to ative Visible Objects. Depois, expanda a aba Data, expanda Armature e habilite Export Deformation Bones Only.

| ![](/files/7d889f7778a92ec0c47c5b9d66759936dedae0ab) | ![](/files/80a2575e0f142df86a11bfc04a2c6f3f2beeb0e7) |
| ---------------------------------------------------- | ---------------------------------------------------- |

Se você precisar fazer sampling da animação, expanda a aba Animation, expanda Sampling Animations e escolha o número de samples desejado.

| ![](/files/7e4262cfe49844479ddc85afb3ed3da3d3cf3219) | ![](/files/2af2732095cdd282f7b074cdde9ead0aabb34397) |
| ---------------------------------------------------- | ---------------------------------------------------- |

É isso para exportar a animação!

## Referências

Se você ainda não tem certeza de por onde começar ou precisa de alguma referência ou inspiração, aqui estão alguns clipes de animação para ajudar nisso. Eles podem ser um ótimo material de estudo!

[Idle.glb](https://raw.githubusercontent.com/decentraland/documentation-creators/main/images/emotes/idle.glb)

[Jump.glb](https://raw.githubusercontent.com/decentraland/documentation-creators/main/images/emotes/jump.glb)

[Walk.glb](https://raw.githubusercontent.com/decentraland/documentation-creators/main/images/emotes/walk.glb)

[Run.glb](https://raw.githubusercontent.com/decentraland/documentation-creators/main/images/emotes/run.glb)

[Pose\_Jump.glb](https://raw.githubusercontent.com/decentraland/documentation-creators/main/images/emotes/pose_jump.glb)

[Pose\_Spin.glb](https://raw.githubusercontent.com/decentraland/documentation-creators/main/images/emotes/pose_spin.glb)

[Spotlight.glb](https://raw.githubusercontent.com/decentraland/documentation-creators/main/images/emotes/spotlight.glb)

[Fashionista.glb](https://raw.githubusercontent.com/decentraland/documentation-creators/main/images/emotes/fashionista.glb)

[Chic.glb](https://raw.githubusercontent.com/decentraland/documentation-creators/main/images/emotes/chic.glb)

[Flag\_Emote.glb](https://github.com/decentraland/docs/blob/main/images/emotes/Flag_Emote.glb)

[Flag\_Emote.blend](https://github.com/decentraland/docs/blob/main/images/emotes/Flag_Emote_Final.blend)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.decentraland.org/creator/content-creator-pt/wearables-e-emotes/emotes/creating-emotes.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
