Meshes

Saiba quais propriedades de mesh são suportadas em modelos 3D importados para o Decentraland.

Modelos 3D têm um mesh composto por triangulares faces. Essas faces se encontram umas com as outras em arestas (as linhas ao longo das quais elas se tocam) e vértices (os pontos onde os seus cantos se juntam).

Limitações de Espaço

Todos os modelos 3D na sua cena devem caber dentro dos limites dos seus parcels. Se qualquer parte dos seus modelos se estender além desses limites ao executar uma visualização, essas partes que se estendem serão cortadas e não serão renderizadas.



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


circle-info

📔 Nota: No cliente Web mais antigo do Decentraland, por razões de desempenho, se qualquer parte de um modelo 3D estava fora dos limites, mesmo que fosse apenas a caixa delimitadora, então o modelo inteiro não era renderizado. A partir do cliente desktop Decentraland 2.0, apenas as partes de um modelo que estão fora dos limites são cortadas. As partes do modelo que estão dentro da cena são renderizadas.

Bounding Boxes

Se você tiver um modelo que tem todos os seus vértices corretamente dentro da área da cena, mas que tem caixas delimitadoras grandes que estão em sua maioria vazias e se estendem além dos limites da cena, o modelo inteiro será marcado como fora dos limites da cena no Creator Hub. As partes do modelo que estão dentro dos seus parcels serão renderizadas corretamente, e você será autorizado a publicar sua cena.

Cada mesh tem uma caixa delimitadora, que envolve os limites da forma. Para tornar um modelo 3D mais utilizável dentro do Decentraland, certifique-se de que suas caixas delimitadoras não se estendam além do modelo mais do que o necessário.

Para evitar esse problema, você pode limpar seus modelos 3D para resetar posições e rotações das meshes para que as caixas delimitadoras não se estendam além das meshes que envolvem.



No Blender você pode fazer isso selecionando os objetos, pressionando Ctrl+A e então Aplicar “All transforms”.

Por exemplo, tenha cuidado ao rotacionar uma sub-mesh perto da borda do seu modelo. Como as caixas delimitadoras são cubos, mesmo que a mesh seja arredondada, os cantos da sua caixa delimitadora podem acabar salientes após rotacioná-la 45°.



Recomendamos que você faça o bake da rotação e escala de cada mesh no modelo, para assegurar que não haja caixas delimitadoras indesejadas se estendendo além do tamanho necessário.

Limitações de Triângulos

Porque Decentraland é um mundo aberto cheio de diferentes cenas e objetos que estão sendo baixados dinamicamente (no mesmo espaço 3D), é importante otimizar nossas meshes para ter um bom desempenho durante o jogo. Nesse sentido, há algumas limitações de cena que sempre precisamos ter em mente quando se trata de meshes:

n representa o número de parcels que uma cena ocupa.

  • Triângulos: n x 10000 Quantidade total de triângulos para todos os modelos na cena.

  • Altura: log2(n+1) x 20 Altura em metros.

  • Tamanho de arquivo: 15 MB por parcel - 300 MB máx Tamanho total dos arquivos enviados ao servidor de conteúdo. Inclui modelos 3D e áudio. Não inclui arquivos que não são enviados, como pacotes node.js.

  • Tamanho máximo de arquivo 50 MB por arquivo Nenhum arquivo individual de qualquer tipo na cena pode exceder 50 MB, não importa quantos parcels a cena tenha.

Para mais informações verifique todas as limitações da cena aqui.arrow-up-right

circle-exclamation

Meshes em Grandes Cenas

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

  • Modularidade: Divida meshes grandes em partes menores e modulares. Por exemplo, em vez de ter uma única mesh para um prédio inteiro, o prédio poderia ser dividido em meshes separadas para cada parede, piso e seção do prédio. Isso permite que o frustum culling do Unity funcione de forma mais eficaz, já que apenas as partes visíveis precisam ser consideradas para renderização. Também melhorará a pegada de memória, porque uma mesh pode ser reutilizada várias vezes para o mesmo objeto em diferentes locais (para conseguir isso você precisará referenciar a mesma mesh na definição da sua cena SDK7 ou usar instâncias em vez de objetos duplicados ao exportar a cena do Blender).

  • Volume Delimitador: Assegure que o volume delimitador de cada objeto se encaixe o mais apertado possível. Espaço extra no volume delimitador pode fazer com que objetos sejam renderizados quando não estão visíveis.



O que é Frustum Culling?

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



Um nível interno em forma de labirinto. Esta vista normal da cena mostra todos os Game Objects visíveis.



O frustum culling regular renderiza apenas objetos dentro da vista da câmera. Isso é automático e acontece sempre.

Instanciar Objetos vs Duplicar 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 ocorre porque todas as instâncias compartilham os mesmos dados subjacentes.

Em termos de desempenho, instanciar pode ser muito mais eficiente do que duplicar, especialmente ao trabalhar com cenas complexas ou grande número de objetos. Isso porque instanciar usa menos memória do que duplicar, já que não cria novos dados para cada instância. Além disso, instanciar pode permitir que o Blender otimize o processo de renderização tratando todas as instâncias como um único objeto, em vez de renderizar cada duplicado separadamente.

No geral, instanciar pode ser uma ferramenta poderosa para melhorar o desempenho e a eficiência do fluxo de trabalho no Blender e na sua Cena Decentraland, especialmente ao trabalhar com cenas grandes e complexas.



Em alguns casos, ao duplicar objetos como árvores, plantas e postes de luz, instanciar pode melhorar significativamente o desempenho em comparação com duplicá-los. Por exemplo, esta cena tem quatorze postes de luz, todos exatamente iguais. Sabemos que cada poste de luz tem duas texturas diferentes, uma para o poste e outra para a lâmpada. Então, neste caso teremos duas draw calls, uma por textura.



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

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

Duplicar Objetos

Menu:
Object ‣ Duplicate Objects

Tecla de atalho:

Shift-D

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



Instanciar Objetos

Painel:
Toolbar ‣ Tools ‣ Edit ‣ Duplicate Linked

Menu:

Object ‣ Duplicate Linked

Tecla de 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 são modificadas. Propriedades de transform continuam sendo cópias, não vínculos, então você ainda pode rotacionar, escalar e mover livremente sem afetar as outras cópias.



Quando exportamos esses modelos, ainda teremos o mesmo número de draw calls (28). Entretanto, note que agora temos apenas uma mesh, o que reduz significativamente o uso de disco (41 kb).



Para manter as coisas organizadas você pode simplesmente instanciar coleções na sua cena, essa abordagem permite controlar todas as instâncias a partir de uma única pasta e fonte.

Nomeação de Meshes

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

Para nomeação de assets use mistura de PascalCase e snake_case, que podemos chamar de PascalSnake_case. Regras básicas ali - nova palavra ou palavra após separador (_) começa com Letra maiúscula.

  • Use nomes significativos para suas meshes Exemplos: 🟢 Prefira nomes - Theater, Tram 🔴 Evite nomes - Untitiled.008, primitive(1), Cylinder.091, _sphere-AB

  • Use underscore _ como separador para trazer mais contexto ao nome. Coloque as coisas mais comuns primeiro e os específicos no final. Exemplos: 🟢 Prefira nomes - FountainStatue, TheaterMainWall, TramWheelLeft 🔴 Evite nomes - North_MainWall_Theater, Tram_LeftFront_Wheel

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

Ferramentas Para Criar Modelos

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

Decimate

Este é um modificador bem conhecido que pode ser usado para reduzir a quantidade de tris da sua mesh enquanto mantém a estrutura da superfície do modelo. Embora esta seja uma ferramenta muito poderosa para otimizar modelos, leve em conta que uma vez que o modelo é decimado a topologia pode ser afetada causando uma topologia ruim (porque quebra a geometria em pedaços imprevisíveis). Por outro lado, a decimação converterá os quads da sua mesh em triângulos tornando difícil modificá-la depois de usada. Nesse sentido a decimação pode ser útil para modelos estáticos mas não é preferida para modelos animados.




Outra maneira de otimizar suas meshes usando decimação é decimar o modelo e então fazer uma retopologia adequada. Dessa forma você pode assegurar um resultado mais previsível e uma topologia limpa.

Alguns addons de retopologia que podem ser úteis são (alguns deles 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 objeto em qualquer direção (X,Y,Z). É uma ótima ferramenta quando você tem modelos simétricos porque reduz o tempo de modelagem 3D, faz o UV Unwrapping (porque você só precisará unwrapar uma parte do modelo e o resto compartilhará as mesmas coordenadas UV) e também otimiza suas texturas evitando desperdiçar resolução de textura em partes que são essencialmente espelhadas.



Batch Rename

Uma ferramenta muito útil para alterar convenções de nome de forma fácil é usar o Batch Rename que o Blender tem integrado em seu kit de ferramentas. Para acessá-lo vá em Edit e então Batch Rename.



Selecione os objetos que você quer mudar o nome e apenas substitua o nome padrão do objeto pelo novo. Essa ferramenta fornece diferentes métodos e tipos de asset para renomear, então é muito flexível para alterar os nomes também de meshes, animações, bones, etc.




Melhores práticas para geometrias #arrow-up-right

  • Fique atento a quantas faces você adiciona aos seus modelos 3D, já que mais faces tornam sua renderização mais exigente. Veja limitações da cenaarrow-up-right pelos limites impostos por uma cena.

  • Certifique-se de que não haja faces ocultas que não podem ser vistas mas que adicionam à contagem de triângulos.

  • Para formas que devem ter lados arredondados, configure-as para serem smooth em vez de adicionar faces adicionais.

  • Certifique-se de que as normals de todas as faces estejam voltadas para fora em vez de para dentro. Se houver faces no seu modelo que parecem não estar lá quando você renderiza, essa é muito provavelmente a causa.

  • Faça o bake da rotação e escala das suas meshes, para que suas caixas delimitadoras não se estendam desnecessariamente.

Atualizado