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
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.
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.
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.
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.
Suas opções
A partir daqui você tem três opções:
- Fazer nada (ignorância é um lugar feliz, mas pelo menos junte-se a mim boletim de desempenho)
- 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.
- 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.