Confira a postagem original do blog em TheGameDev.Guru: Lotes estáticos no Unity como você nunca viu

A razão para esta postagem no blog é simples:

A maioria dos desenvolvedores acha que sabe como o lote estático realmente funciona. Mas isso é mentira: eles não.

Eles apenas sabem o básico que o Unity lhes ensinou, enquanto ignoram todos os detalhes de baixo nível que, de outra forma, explicariam por que o lote estático é uma droga às vezes ou não funciona em situações comuns.

Índice

fearful face icon v2

O que o Unity diz (ou não) sobre lotes estáticos

Pense em lotes estáticos. A unidade diz a você para:

  • Ative o sinalizador estático na geometria estática
  • Ative o lote estático nas configurações do projeto
  • Faça um atlas de textura para compartilhar materiais e permitir que o agrupamento estático funcione.
  • Tenha cuidado com a memória!1!!

E a promessa deles:

Desempenho.

O problema é que lotes estáticos não funcionam bem em muitos casos. E não funciona de forma alguma Em outros casos. Mas você realmente não entenderá o porquê se não entender suas complicadas partes internas. E certamente você não saberá o que fazer em vez disso.

E não que eu vá explicar tudo aqui. Para isso, tenho um módulo de treinamento totalmente dedicado em minha associação à Força-Tarefa de Desempenho. Mas pelo menos você terá um nível de consciência que não tinha antes.

Então vamos mergulhar.

1 circle

Lote Estático: Primeiro o Básico

O lote estático promete pré-combinar malhas estáticas para que você possa potencialmente emitir menos chamadas de desenho. Você não altera a malha, portanto, pode agrupar mais chamadas de desenho. Parece bom porque é (geralmente) bom.

E você faz isso marcando o Lote Estático sinalizador em seus renderizadores de malha de destino. Se você fizer isso e renderizadores de malha suficientes compartilharem o mesmo material, você obterá lotes estáticos para funcionar.

É isso.

1
2 circle

Lote Estático: Segundo Avançado

Bits mais avançados agora:

Primeiro, o lote estático não reduz necessariamente as chamadas de desenho, embora na maioria das vezes isso aconteça. A parte importante é que o lote estático torna as chamadas de desenho individuais (muito) mais baratas.

Em segundo lugar, o lote estático geralmente requer o uso de dois tipos diferentes de buffers: buffers de vértice e buffers de índice. O primeiro contém todos os atributos por vértice (posição local, uv, normais, etc). E o segundo buffer contém os índices que definem os triângulos que queremos renderizar.

Em terceiro lugar, você pode interromper o batching estático bagunçando o objeto do jogo e o estado de ativação do renderizador de malha durante Awake. Então não faça isso.

Quarto, seu uso de memória pode disparar. Um exemplo é uma floresta de 1000 árvores. Todas as árvores se tornarão um grande pedaço de malha, então a memória será como 1000 * memory_of_one_tree. Às vezes, é melhor usar a instância de GPU.

2

E agora?

Portanto, tudo se resume a entender os componentes internos do lote estático no Unity. Porque as coisas vão dar errado eventualmente. E obter treinamento preciso sobre como cada otimização de desempenho funciona é um investimento sólido para você. Você saberá o que procurar, como reagir e poderá orientar seus colegas e o projeto.

Quando os estúdios me contatam para obter consultoria de otimização de desempenho do Unity, metade do tempo eu diagnostico o uso inadequado de lotes estáticos. E isso prejudica seu jogo e sua base de fãs porque aumenta os tempos de carregamento e a taxa de travamento desnecessariamente.

Portanto, fique atento a isso.

consulting banner

Suas opções

A partir daqui você tem três opções:

  1. Fazer nada (ignorância é um lugar feliz, mas pelo menos junte-se a mim boletim de desempenho)
  2. Aprender dosagem estática desde o início: passe alguns dias sozinho ou passe algumas horas no módulo de dosagem estática do Força-Tarefa de Desempenho.
  3. Candidate-se ao meu (caro) Consultoria Unity para fazer seu jogo bem e rapidamente. Sem aborrecimentos, apenas entregáveis.

Ruben (TheGameDev.Guru)

Com informações de GameDev.net.