Otimização de desempenho do Unity 2: problemas de memória

Índice

Problemas de memória causados ​​por políticas

Memória GFX

Recursos de textura

Formato de compressão

Mipmap

recurso de grade

Ler escrever

dados de vértice

esqueleto

lote estático

Recursos de sombreamento

Memória Reservada

RenderTexture

recursos de animação

recursos de áudio 

Recursos de fontes

Ativos do sistema de partículas

Memória heap mono


Problemas de memória causados ​​por políticas

1. Quando o Assetbundle é empacotado, um único recurso é empacotado repetidamente. Você pode empacotar recursos dependentes individualmente. Você pode visualizar os recursos no Assetbundle por meio do AssetBundleBrowser. Endereço: Unity Technologies · GitHub

2. O código é utilizado indevidamente e os recursos não são destruídos a tempo após o carregamento, como:

            var gos = Resources.Load<GameObject>("Sphere");
            GameObject go = Instantiate(gos);
            Material ma = go.GetComponent<Renderer>().material;
            ma.color = new Color(1, 0.5f, 0.5f);
            
            //Destroy(ma);
            Destroy(go);

 Ainda haverá um material na memória, pois cada vez que você define a cor, um novo material é criado.

3. O descarregamento incorreto do Assetbundle leva à redundância de recursos. Unload(false) irá descarregar o assetbundle carregado, mas os recursos carregados a partir dele ainda estão lá. Unload(true) irá descarregá-los.

Memória GFX

Memória GFX (Gráficos) refere-se à memória dedicada do processador gráfico (GPU), que é usada para armazenar dados gráficos e dados temporários necessários para cálculos.

Recursos de textura

Formato de compressão

1. Quando as imagens são importadas para o Unity, elas serão convertidas em formatos reconhecidos pelo Unity, como jpg e png. São formatos armazenados no disco rígido, mas não podem ser lidos diretamente pela GPU, portanto serão convertidos para ETC e ASTC quando importado. Formato

2. Benefícios da compactação de imagem:

Reduza o uso de memória, largura de banda e tempo de carregamento

3. Caso o formato de compactação da imagem não seja suportado na plataforma, ela será convertida para o formato RGBA, ou seja, não será compactada.

4. Android suporta ETC/ASTC; IOS suporta ASTC/PVRTC; PC suporta DTX

5. ASTC pode ajustar o tamanho do bloco de compressão para ajustar a taxa de compressão, porque ASTC usa um bit fixo de 128 bits para armazenar um bloco. Quanto mais pixels no bloco, maior será a taxa de compressão, porque o espaço de armazenamento é distribuído igualmente para cada pixel. Quanto menor, como 4x4, 6x6, 8x8

Mipmap

1. Vantagens e desvantagens do mipmap

Benefício: Largura de banda reduzida Desvantagem: Aumento de memória

2. Princípio

A memória da imagem armazenada é uma sequência geométrica, 1, 1/4, 1/16..., a soma da memória é 4/3 vezes a original, ou seja, a memória aumentou 1/3

3. Para interfaces 2D, como a distância da câmera não muda, o mipmap deve ser desligado. Para objetos 3D ou UI, o mipmap pode ser ativado de acordo com a situação.

4. Altere o número de Mipmaps adicionados à memória através da Qualidade de Textura, de modo a realizar máquinas com desempenho e configurações diferentes.

Modificado através de Edit-Project Settings-Quality--Textures, ele só tem efeito para texturas com Mipmap ativado, e a memória como FullRes e HalfRes interna é reduzida para 1/4 do valor original.

5. O Texture Streamming altera dinamicamente o número de Mipmaps carregados na memória

Só é válido para texturas Mipmap carregadas dinamicamente,tais como carregamento de assetbundle.Se a textura já existir na cena e for carregada através do carregamento da cena,o Texture Streaming não terá efeito porque a textura já existe e não pode ser alterada dinamicamente.

O carregamento de textura carregará dinamicamente o Mipmap no pacote ab em tempo real com base na posição do objeto e da câmera.

Condições de validade: Textura ativa streaming de textura e gera Mipmap

A prioridade de MaxLevelReduction (o nível mais recortado)>Memroy Budget (a memória máxima ocupada pelo mipmap)

recurso de grade

Ler escrever

A CPU e a CPU ocuparão cada uma um compartilhamento de memória. Se você não precisar modificar a malha no código, não habilite esta opção.

dados de vértice

Existem muitos dados de vértice de uma malha, como posição, cor, tangente, etc., mas as tangentes geralmente são usadas no cálculo da iluminação. Você pode definir a tangente como nenhuma na coluna do modelo ao importar o modelo, ou pode usar a configuração do projeto Turn ao otimizar os dados da malha interna, ele cortará atributos de vértice não utilizados e precisa ser testado.

esqueleto

Se o modelo não exigir dados do esqueleto, defina o tipo de animação como nenhum na coluna RIG da importação do modelo.

lote estático

Aumentará a memória e trocará espaço por tempo.

Recursos de sombreamento

1. A memória ocupada pelo shader, desde que seja uma variante de shader, cada variante irá gerar um shader e carregá-lo na memória

2. Quando o jogo é inicializado, geralmente é necessário carregar todos os Shaders usados ​​​​para renderização com antecedência para reduzir o atraso causado pelo carregamento e compilação oportuna quando o jogo está em execução. Neste momento, podemos chamar Shader.WarmupAllShaders para carregar os Shaders atuais na memória. O Shader é compilado uma vez, incluindo todas as variantes.

3. À medida que os efeitos de renderização do projeto se tornam mais ricos, há cada vez mais variantes de Shader. Chamar aproximadamente a interface de carregamento completo fará com que o tempo de inicialização do jogo se torne mais longo e afete a experiência do jogo.

4. Mais tarde, o Unity adicionou a coleção de variantes ShaderVariantCollection para substituir a interface bruta de carregamento completo acima, para obter carregamento sob demanda e melhorar a velocidade de carregamento

5. Direção de otimização: recorte de variantes de shader

Endereço: https://answer.uwa4d.com/question/5da86670e84db43d6efbda72
 

Memória Reservada

RenderTexture

Desative o anti-aliasing adequadamente ou reduza a qualidade do anti-aliasing , reduza a qualidade dos mapas de sombras, ou seja, a resolução, e reduza o número de bits de armazenamento RT (definidos quando o código é gerado). Se o HDR não use o canal alfa, você pode modificar o formato para R11G11B10 , ou seja, 32 é o formato de armazenamento

recursos de animação

1. Marque Reamostrar código. Na coluna de animação da importação do modelo, ele está ativado por padrão. Isso reduzirá o número de quadros-chave.

2. Comprimir animação

3. Animação esquelética, sem escala, remove curvas de escala não utilizadas, por meio do código do editor, AnimationUtility

4. Reduza a precisão flutuante do armazenamento de animação, para que seu método de armazenamento seja constante e reduza a memória

5. Selecione a animação e você poderá ver suas informações detalhadas no painel de propriedades.

recursos de áudio 

1. ForceToMono: Combine áudio de dois canais em mono

2. Tipo de carga: 

Descompactar ao carregar: Após carregar, descompacte e armazene na memória descompactado

Compactar na memória: Armazene na memória em formato compactado, descompacte durante a reprodução

Stream: reproduza durante a descompactação, mas um cache será adicionado cada vez que for reproduzido.

Para música de fundo longa e alta, tocada com pouca frequência, use stream; para música curta e frequente, use o primeiro tipo (roubo de som) e para outras músicas de nível médio, use o segundo tipo.

3. Formato de compressão

Quanto menor a taxa de compactação, menor será a memória do arquivo ocupada após a compactação. O formato de compactação ADPCM ocupa a menor memória. Use com Compactar na memória PCM
: sem compactação, Mp3: segundo, Vorbis: segundo, ADPCM: menor

Recursos de fontes

1. Redução de fontes: algumas fontes não são usadas e podem ser cortadas. Ferramentas recomendadas: FontSubsetGUI, FontPruner

2. Compressão de fontes: As fontes geradas pelo TMP são muito problemáticas e não podem ser alteradas.A textura é compactada extraindo sua textura, depois compactando-a e atribuindo-a.

Ativos do sistema de partículas

1. A memória ocupada pelas partículas está relacionada ao número de partículas realmente jogadas e não tem nada a ver com o número máximo de partículas.

2. Se as partículas não forem reproduzidas, elas também ocuparão parte da memória, por exemplo: o sistema de partículas é apenas fechado, mas não excluído.

Memória heap mono

1. A memória residente é muito alta: como lista, dicionário, array. A memória durante a inicialização não deve ser muito alta.

2. Alocar memória continuamente: para cada 10.000 quadros, alocar no máximo 50M, armazenando variáveis ​​em cache durante a inicialização






 


 

Acho que você gosta

Origin blog.csdn.net/qq_37672438/article/details/131958138
Recomendado
Clasificación