> 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/modelacao-3d-e-animacoes/meshes.md).

# Meshes

Os modelos 3D têm uma *mesh* composta por *faces*. Essas faces se encontram nas *edges* (as linhas ao longo das quais se tocam) e *vertices* (os pontos onde seus cantos se unem).

{% 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 %}

## Limitações de espaço

Todos os modelos 3D na sua scene devem caber dentro dos limites dos seus parcels. Se qualquer parte dos seus modelos ultrapassar esses limites ao executar um preview, essas partes que excederem serão cortadas e não renderizadas.

![](/files/9292229672a826e226b3ba4c7136546fd4063d92)

No editor do Creator Hub, você verá o modelo tingido de vermelho e sua bounding box marcada em vermelho.

![](/files/25a9b2f3add7e395f1747c3dc968904bec7e5477)

{% hint style="info" %}
**📔 Nota**No antigo cliente Web de Decentraland, por motivos de performance, se qualquer parte de um modelo 3D estivesse fora dos limites, mesmo que apenas a bounding box, então o modelo inteiro não era renderizado. No cliente desktop do Decentraland 2.0, apenas as partes de um model fora dos limites são cortadas. As partes do model que estão dentro da scene são renderizadas.
{% endhint %}

## Bounding Boxes

Se você tiver um model que tenha todos os seus vertices perfeitamente dentro da área da scene, mas que tenha grandes Bounding Boxes que estejam em sua maioria vazias e ultrapassem os limites da scene, o model inteiro será marcado como fora dos limites da scene no Creator Hub. As partes do model que estão dentro dos seus parcels serão renderizadas corretamente, e você poderá publicar sua scene.

Todo mesh tem uma bounding box, que envolve os limites da forma. Para tornar um modelo 3D mais utilizável dentro do Decentraland, certifique-se de que suas bounding boxes não se estendam além do model mais do que o necessário.

Para evitar esse problema, você pode limpar seus modelos 3D para redefinir as posições e rotações dos meshes, de modo que as bounding boxes não se estendam além dos meshes que elas envolvem.

![](/files/18c201c8d8dfb6047ca785eba807dea74c1f10ee)

*No Blender, você pode fazer isso selecionando os objetos, pressionando Ctrl+A e depois Apply “All transforms”.*

Por exemplo, tenha cuidado ao girar um sub-mesh perto da borda do seu model. Como as bounding boxes são cubes, mesmo que o mesh seja redondo, os cantos de sua bounding box podem acabar ficando para fora depois de girá-lo 45°.

![](/files/0051ff0f432ce15b5172595fa49e58a1c9a63c39)

Recomendamos bakear a rotação e a scale de cada mesh no model, para garantir que não haja bounding boxes indesejadas se estendendo além do tamanho que elas precisam ter.

## Limitações de triângulos

Como Decentraland é um mundo aberto cheio de scenes e objetos diferentes que são baixados dinamicamente (no mesmo espaço 3D), é importante otimizar nossos meshes para ter um bom desempenho ao jogar. Nesse sentido, há algumas limitações de scene que sempre precisamos ter em mente quando se trata de meshes:

> n representa o número de parcels que uma scene ocupa.

* **Triângulos:** n x 10000 Quantidade total de triângulos para todos os modelos na scene.
* **Altura:** log2(n+1) x 20 Altura em metros.
* **Tamanho do ficheiro:** 15 MB por parcel - 300 MB máx. Tamanho total dos ficheiros enviados para o content server. Inclui modelos 3D e áudio. Não inclui ficheiros que não são enviados, como pacotes node.js.
* **Tamanho máximo do ficheiro: 50 MB por ficheiro** Nenhum ficheiro individual de qualquer tipo na scene pode exceder 50 MB, não importa quantos parcels a scene tenha.

Para mais informações, confira todas as limitações da scene [aqui.](https://docs.decentraland.org/creator/development-guide/scene-limitations/)

{% hint style="warning" %}
**🔥Dica de otimização🔥: Adicionar contagem de polígonos** Uma dica valiosa é acompanhar sempre o polycount dos seus models. Para fazer isso no Blender, você precisa ativar as estatísticas no painel de overlays do viewport.

<img src="/files/2bea2e44cc6a75964d467f96da21f5856fc41343" alt="" data-size="original">
{% endhint %}

## Meshes em scenes grandes

Ao criar meshes, devemos ter em mente estas 2 boas práticas:

* **Modularidade:** Divida meshes grandes em partes menores e modulares. Por exemplo, em vez de ter um único mesh para um edifício inteiro, o edifício poderia ser dividido em meshes separados para cada parede, piso e seção do edifício. Isso permite que o frustum culling do Unity funcione de forma mais eficaz, já que apenas as partes visíveis precisam ser consideradas para rendering. Isso também melhorará o uso de memória, porque um mesh pode ser reutilizado várias vezes para o mesmo objeto em locais diferentes (para conseguir isso, você precisará referenciar o mesmo mesh na definição da sua scene SDK7 ou usar instâncias em vez de objetos duplicados ao exportar a scene do Blender).
* **Bounding Volume**: Garanta que o bounding volume de cada objeto se ajuste o mais firmemente possível. Espaço extra no bounding volume pode fazer com que os objetos sejam renderizados quando não estão visíveis.

![](/files/2eec815955fede9e067c43e5c6243066bb91e7ef)

### O que é Frustum Culling?

Frustum Culling é uma técnica de otimização que desativa os renderers (meshes) de objetos que estão fora da área de visualização da câmera. Veja estes 2 exemplos:

![](/files/c857c3eddab7e58bd1e235fe610f1bd4081c4e8f)

*Um nível interno em forma de labirinto. Esta visão normal da scene mostra todos os Game Objects visíveis.*

![](/files/349142107d9b8815687873270d807666f8d0193c)

*O frustum culling normal renderiza apenas objetos dentro da visão da câmera. Isso é automático e sempre acontece.*

## Instanciando objetos vs. duplicando objetos

No Blender, duplicar um objeto cria uma cópia completamente separada do objeto, enquanto instanciar um objeto cria um duplicado que compartilha os mesmos dados do objeto original.

Quando um objeto é duplicado, ele cria um novo objeto com um conjunto de dados completamente independente, incluindo toda a sua geometria, materiais e animações. Isso significa que quaisquer alterações feitas no objeto original não serão refletidas no objeto duplicado, e vice-versa.

Por outro lado, quando um objeto é instanciado, quaisquer alterações feitas no objeto original serão refletidas em todas as suas instâncias, e vice-versa. Isso acontece porque todas as instâncias compartilham os mesmos dados subjacentes.

Em termos de performance, instancing pode ser muito mais eficiente do que duplicating, especialmente ao trabalhar com scenes complexas ou grandes quantidades de objects. Isso acontece porque instancing usa menos memória do que duplicating, já que não cria novos dados para cada instance. Além disso, o instancing pode permitir que o Blender otimize o processo de rendering tratando todas as instances como um único object, em vez de renderizar cada duplicate separadamente.

No geral, instanciar pode ser uma ferramenta poderosa para melhorar a performance e a eficiência do workflow no Blender e na sua Scene do Decentraland, especialmente ao trabalhar com scenes grandes e complexas.

![](/files/6eefe383a6c43315e62271eb6d825e6cb9de2934)

Em alguns casos, ao duplicar objetos como árvores, plantas e postes de luz, instanciar pode melhorar significativamente a performance em comparação à duplicação. Por exemplo, esta scene tem quatorze postes de luz, e todos são exatamente iguais. Sabemos que cada poste de luz tem duas texturas diferentes, uma para o poste e outra para a luz. Então, neste caso, teremos dois draw calls, um por textura.

![](/files/61ad01baea4cb85030c45c7adddbd131ca5a70a9)

No Blender, quando você está na etapa de clonar e posicionar elementos no espaço, você tem três opções. Duplicar, instanciar ou mesclar objects.

Vamos analisar quais são os prós e contras de cada procedimento.

### Duplicar objetos

| Menu:   | Object ‣ Duplicate Objects |
| ------- | -------------------------- |
| Atalho: | Shift-D                    |

Isso criará uma cópia visualmente idêntica do objeto selecionado, mas eles serão tratados como objetos diferentes. Então, ao exportar, ele terá 2 draw calls por object, 2 \* 14 = 28 draw calls, e um uso total de disco de 320 kb.

![](/files/62cd8c5f6069ae520dd275c1657570358b3a44c0)

### Instanciando objetos

| Painel: | Toolbar ‣ Tools ‣ Edit ‣ Duplicate Linked |
| ------- | ----------------------------------------- |
| Menu:   | Object ‣ Duplicate Linked                 |
| Atalho: | Alt-D                                     |

Isso criará um novo objeto com todos os seus dados vinculados ao objeto original. Se você modificar um dos objetos vinculados no Edit Mode, todas as cópias vinculadas serão modificadas. As propriedades de Transform continuam sendo cópias, não links, então você ainda pode girar, escalar e mover livremente sem afetar as outras cópias.

![](/files/5352841826f5f4a514ecb98e4af144ee243ca8fa)

*Ao exportar esses models, ainda teremos o mesmo número de draw calls (28). No entanto, observe que agora temos apenas um mesh, o que reduz significativamente o uso de disco (41 kb).*

![](/files/3e9f4bd75be58548ce27da87085ed3079bd696ca)

*Para manter tudo organizado, você pode simplesmente instanciar collections na sua scene; dessa forma, você pode controlar todas as instâncias a partir de uma única pasta e origem.*

{% hint style="info" %}
**💡 Dica**: A mesma lógica se aplica do lado do SDK. Quatorze entities que apontam todas para seu `GltfContainer` para o mesmo *.glb* file comportam-se como instâncias: o ficheiro é descarregado uma vez, convertido uma vez, e seus meshes e textures são mantidos na memória uma vez, não importa quantas entities o usem. Dividir o mesmo conteúdo em catorze files quase idênticos *.glb* é o equivalente a duplicar, e custa catorze downloads e catorze cópias na memória.
{% endhint %}

### Mesclar objetos

| Menu:   | Object ‣ Join |
| ------- | ------------- |
| Atalho: | Ctrl-J        |

Isso une os objetos selecionados em um único objeto com um único mesh. Funciona no Object Mode, mescla tudo para o último *ativo* object, e requer que todos os objetos selecionados sejam do mesmo tipo. Os materiais são preservados e mesclados, então nossos quatorze postes de luz deixam de ser quatorze objetos renderizáveis e se tornam um só, e o engine os desenha com 2 draw calls em vez de 28 — um por material, de uma vez.

Esta é a única das três opções que realmente reduz o número de draw calls, e vale a pena deixar claro por quê: o engine de Decentraland constrói sua scene em runtime a partir de conteúdo transmitido, então ele não pode agrupar ou fazer batch de objetos repetidos para você da mesma forma que um engine pode fazer com conteúdo previamente bakeado. Se você precisa de menos draw calls, a mesclagem precisa acontecer no Blender.

Essa redução não é gratuita. A mesclagem abre mão de várias coisas de uma vez:

* **O uso de disco volta a aumentar.** O mesh mesclado armazena a geometria dos quatorze postes, então você perde a economia que a instanciação lhe dava.
* **O frustum culling passa a ser tudo ou nada.** Um objeto mesclado é desenhado por completo sempre que qualquer parte dele está na tela. Quatorze postes espalhados ao longo de uma rua quase sempre terão um poste visível, então você acaba desenhando os quatorze o tempo todo — o que pode facilmente custar mais do que os draw calls economizados.
* **As partes deixam de poder ser endereçadas individualmente.** Você já não pode mover, animar, clicar ou ocultar um único poste, porque só resta um objeto.

Use a mesclagem de forma restrita: para muitos pequenos props que são sempre vistos juntos em um único ponto, nunca interagidos, e somente depois de confirmar que a quantidade de objects é o que está realmente prejudicando a performance. Para tudo o mais, instanciar é a melhor opção padrão.

{% hint style="warning" %}
**📔 Nota**: Exportar quatorze objetos separados para um único *.glb* file é **não** mesclar. O engine ainda vê quatorze objects e ainda emite 28 draw calls. Apenas unir os meshes altera a contagem.
{% endhint %}

## Nomeação de meshes

Use nomes significativos para seus meshes. O nome deve dar contexto de onde o asset é usado ou a que parte do object ele se relaciona.

Para a nomeação de assets, use uma mistura de `PascalCase` e `snake_case`, que podemos chamar de `PascalSnake_case`. As regras básicas são estas - uma nova palavra ou palavra após um separador (`_`) começa com **letra maiúscula.**

* Use nomes significativos para seus meshes **Exemplos:** 🟢 **Prefira** nomes - `Theater`, `Tram` 🔴 **Evite** nomes - `Untitiled.008`, `primitive(1)`, `Cylinder.091`, `_sphere-AB`
* Use underscore `_` como separador para dar mais contexto ao nome. Coloque primeiro as coisas mais comuns e os detalhes no final. **Exemplos:** 🟢 **Prefira** nomes - `FountainStatue`, `TheaterMainWall`, `TramWheelLeft` 🔴 **Evite** nomes - `North_MainWall_Theater`, `Tram_LeftFront_Wheel`

Se houver mais de um object com o mesmo nome, adicione um número após a palavra: `FountainStatue01, FountainStatue02, etc.`

## Ferramentas para criar models

Existem muitos addons e ferramentas externas que facilitam o trabalho ao criar assets para tornar o pipeline mais rápido e eficiente; alguns são gratuitos e outros precisam ser comprados, para citar alguns:

### Decimate

Este é um modifier bem conhecido que pode ser usado para reduzir a quantidade de tris do seu mesh mantendo a estrutura da superfície do model. Embora seja uma ferramenta muito poderosa para otimizar models, leve em conta que, uma vez que o model é decimated, a topology pode ser afetada, causando uma bad topology (porque ela quebra a geometry em pedaços imprevisíveis). Por outro lado, a decimation converterá os quads do seu mesh em triangles, tornando-o difícil de modificar depois de usado. Nesse sentido **a decimation pode ser útil para modelos estáticos, mas não é a preferida para modelos animados.**

![](/files/c7f9ed095bfb84cfe8b8c0c236c10bf2ad122294) ![](/files/dc077ad0f276eddb794126b5668b4d9975be9f41)

Outra forma de otimizar seus meshes usando decimation é decimar o model e depois fazer uma retopology adequada. Dessa forma, você pode garantir um resultado mais previsível e uma topologia limpa.

Alguns addons de retopology que podem ser úteis são (alguns são pagos):

* **Simplygon:** <https://www.simplygon.com/>
* **Speedretopo:** <https://blendermarket.com/products/speedretopo?ref=2>
* **Retopoflow:** <https://blendermarket.com/products/retopoflow>

### Mirror Modifier

O Mirror Modifier no Blender é uma ferramenta usada para criar modelos simétricos espelhando metade de um object em qualquer direção (X, Y, Z). É uma ótima ferramenta quando você tem modelos simétricos porque reduz o tempo de modelagem 3D, fazendo UV Unwrapping (porque você precisará fazer unwrap apenas de uma parte do model e o resto compartilhará as mesmas UV coordinates) e também otimiza suas textures, evitando desperdiçar resolução de textura em partes que são essencialmente espelhadas.

![](/files/dc06edd212e86c4997ff89196bec10f77c8c6d1c)

### Batch Rename

Uma ferramenta muito útil para alterar convenções de nome de forma simples é usar o Batch Rename integrado ao toolkit do Blender. Para acessá-lo, vá para *Edit* e então *Batch Rename*.

![](/files/e4587fa1e4e2867367af61b4bfafc434702cf252)

Selecione os objects que você quer renomear e simplesmente substitua o nome padrão do object pelo novo. Essa ferramenta oferece diferentes métodos e tipos de asset para renomear, então é muito flexível para alterar os nomes também de meshes, animations, bones, etc.

![](/files/08ae8abe532d01d95549b6039d48d96acf25e753) ![](/files/faa1b324e65cb965bf3cc88619677d09d360cc21)

## Melhores práticas para geometrias [#](https://docs.decentraland.org/creator/3d-modeling/meshes/#best-practices-for-geometries)

* Tenha cuidado com quantas faces você adiciona aos seus modelos 3D, pois mais faces tornam a renderização mais exigente. Veja [**scene limitations**](https://docs.decentraland.org/creator/development-guide/scene-limitations/) para os limites impostos por uma scene.
* Certifique-se de que não haja faces escondidas que não possam ser vistas, mas que aumentem a contagem de triângulos.
* Para formas que devam ter lados arredondados, defina-as como *smooth* em vez de adicionar faces adicionais.
* Certifique-se de que os *normals* de todas as faces estejam apontando para fora e não para dentro. Se houver faces no seu model que pareçam não existir quando você o renderiza, essa é provavelmente a causa.
* Bake a rotação e a scale dos seus meshes, para que suas bounding boxes não se estendam desnecessariamente.


---

# 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/modelacao-3d-e-animacoes/meshes.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.
