Otimize o desempenho do jogo com as opções de importação de som do Unity

imagem

Os desenvolvedores geralmente não entendem completamente as opções para importar som para o Unity e, no momento em que escrevi, não consegui encontrar um único guia detalhado para o uso deles. A documentação do Unity descreve bem o que as opções de importação de som fazem, mas eu gostaria de analisar essas descrições para um público mais amplo, além de explicar em mais detalhes como aplicar esses parâmetros para tirar o máximo proveito do jogo.

Este documento está dividido em cinco partes:

  1. Como o som afeta o desempenho
  2. Lidamos com opções de importação
  3. Minhas configurações recomendadas para PC e consoles
  4. Minhas configurações recomendadas para plataformas móveis
  5. Cuidados e notas

A otimização das opções de importação de som do Unity é um dos métodos mais fáceis de otimização. No caso de um projeto pequeno, pode levar menos de uma hora para obter melhorias significativas no tempo de inicialização, RAM e outros aspectos de desempenho. Espero que este guia seja útil para você. As informações são relevantes para a versão 2018 do Unity.3

1. Como o som afeta o desempenho


Os dados do som são volumosos. Em muitos jogos, os dados de áudio ocupam a maior parte do espaço em disco (disco / cartucho / disco óptico onde os dados do jogo são armazenados) e RAM (memória operacional do sistema). Mas não é só isso, eles também carregam seriamente a CPU, especialmente se você usa os efeitos do DSP (processamento de som em tempo real) e também aumentam bastante o tempo de carregamento.

Nessas três áreas (espaço em disco ocupado pela RAM, uso da CPU), a otimização é um cabo de guerra de três vias semelhante ao problema do "bom, barato, rápido" . Se algum aspecto do jogo causar mais danos, você pode manter a eficácia de um aspecto sacrificando outro. Por exemplo, se o som não compactado ocupa muita RAM, você pode armazená-lo na forma compactada do Vorbis - isso economiza espaço na RAM, mas com o custo da carga da CPU, porque o acesso ao arquivo compactado exige mais poder de processamento para decodificá-lo. Abaixo está um gráfico com vários parâmetros e seus efeitos nessas três áreas:


Vale a pena considerar que este diagrama não nos diz nada sobre a largura de banda dos dados lidos no disco / RAM.

Na realidade, existem mais algumas nuances, mas o diagrama deve fornecer uma idéia geral de como esses problemas estão interconectados. Para entender como usar esses parâmetros (e lidar com problemas como tempo de carregamento muito longo), é necessário considerar cada uma das opções de importação de som em detalhes.

2. Compreendendo as opções de importação


Quando você seleciona AudioClip no editor do Unity, o seguinte painel aparece na janela do inspetor:


Abaixo está uma lista de opções de som de cima para baixo com uma descrição do que elas fazem:

Forçar a mono


  • Sim: se o AudioClip for gravado em estéreo (ou com um número diferente de canais), esse parâmetro combinará todos os canais em um canal mono.
  • Não: o número de canais não muda.

No meu trabalho como designer de som, nunca reduzo o sinal de áudio para mono, porque crio sons para uma finalidade específica. Porém, se você usar sons padrão de ações e desejar ativar essa opção, verifique se o arquivo mono não soa plano e estranho devido à interação interfacial dos canais esquerdo e direito. Você pode visualizar o som processado clicando no botão Reproduzir no canto inferior direito da janela do inspetor - se ouvir distorção de fase, poderá tentar separar o som em um editor de áudio de terceiros e exportar individualmente os canais esquerdo e direito como som mono.

Normalizar (disponível apenas quando Forçar para Mono está ativado)


  • Sim: ajusta o ganho do AudioClip para que o som monofônico tenha o mesmo volume que o arquivo estéreo original.
  • Não: não ajusta o ganho.

Se você usa Force to Mono, geralmente vale a pena ativar a normalização. Um arquivo estéreo alto quando misturado ao mono pode se tornar ainda mais alto, exceder a amplitude máxima e levar a uma distorção digital aguda, o que é indesejável.

Carregar dados de áudio em segundo plano / pré-carregar


Esses parâmetros têm um efeito direto um sobre o outro, então eu os combinei.
Carregar em segundo planoPré-carregar dados de áudioResultado
AtivadoAtivadoQuando uma cena é carregada, os clipes de som com esse parâmetro começam a carregar, mas não interrompem o fluxo principal. Se, no momento em que a cena estiver totalmente carregada, nem todas estiverem carregadas, o download continuará em segundo plano quando a cena já estiver em execução. Se o som não estiver carregado, mas já estiver em execução, ele se comportará da mesma forma que quando o Disabled Preload (veja a linha abaixo).
AtivadoDesativadoQuando um som é iniciado pela primeira vez, ele é carregado em segundo plano e reproduzido quando estiver pronto. Se o arquivo for grande, pode haver um atraso perceptível entre iniciar e reproduzir, mas nas reproduções subsequentes do arquivo tudo ficará bem.
DesativadoAtivadoO som é carregado enquanto a cena está sendo carregada. A cena não será iniciada até que todos os sons com este parâmetro ativado sejam carregados na memória.
DesativadoDesativadoQuando o som é iniciado pela primeira vez, ele usa o fluxo principal para carregar-se na memória - se o arquivo for grande, isso pode causar uma lentidão nos quadros, mas nas reproduções subsequentes tudo ficará bem.

Eu recomendo usar essa configuração apenas para arquivos muito pequenos, mas, mesmo nesse caso, vale a pena medir seu efeito no desempenho no criador de perfil e pensar se um grande número desses sons pode ser iniciado simultaneamente, aumentando a carga no desempenho.

Ambisonic


  • Marque esta caixa se o som estiver codificado em Ambisonic. Os sons ambisônicos são úteis para VR, AR, vídeo panorâmico etc., mas esse parâmetro não está relacionado ao nosso manual.

Opções específicas da plataforma


  • Essas guias permitem definir parâmetros padrão e parâmetros específicos da plataforma para as configurações listadas abaixo. Algumas plataformas possuem formatos de compactação que não estão disponíveis em outras, outras podem ter outros equipamentos que requerem otimização diferente. Para compactação específica da plataforma, consulte as notas abaixo.
  • Sempre verifique os parâmetros específicos da plataforma, mesmo se você quiser usar parâmetros comuns - às vezes, o Unity pode definir automaticamente parâmetros específicos da plataforma. Por exemplo, as compilações para iOS podem ter como padrão "especificar taxa de amostragem: 22kHz", o que pode levar ao alias (um defeito de som resultante de uma redução de amostragem incorreta).

Tipo de carga


  • Descompactar ao carregar: o som é armazenado no disco no formato de compactação especificado, mas é descompactado e carregado na RAM descompactada no formato PCM. Isso consome muita RAM e aumenta um pouco o tempo de inicialização, mas é muito barato do ponto de vista do processador e o acesso é muito rápido.
  • Compactado na memória: no disco e na RAM, o som é armazenado no formato de compactação especificado. O local e o tempo de carregamento ocupado na RAM são reduzidos, mas a carga do processador aumenta durante a reprodução do som, pois deve ser descompactado a cada reprodução.
  • Streaming: O streaming de áudio é reproduzido diretamente do disco, ignorando completamente a RAM. Isso ocupa parte da largura de banda do disco e dos recursos da CPU, mas em PCs e consoles não afeta significativamente o desempenho, desde que não mais que dois sons sejam transmitidos simultaneamente. Em plataformas móveis (especialmente em dispositivos baratos e antigos), o streaming simultâneo de vários arquivos estéreo carrega muito o processador (consulte a seção “Cuidados” abaixo).

Formato de compressão


  • PCM: dados de áudio brutos, totalmente descompactados e ocupam muito espaço no disco e na RAM, mas praticamente não precisam de nenhum custo para reproduzi-los, porque a descompactação não é necessária.
  • ADPCM: um formato de compactação muito antigo com uma taxa de compactação de 3,5: 1. A compactação / descompactação é bastante barata em comparação com o Vorbis ou outros formatos de compactação, mas introduz artefatos de ruído digital no som; portanto, você deve usá-lo apenas em "sons ruidosos", nos quais não será perceptível. Se você não tiver certeza se o ADPCM é adequado para qualquer som específico, ative a pré-audição de som nos formatos PCM e ADPCM - se você perceber alguma diferença, recomendo escolher o PCM.
  • Vorbis: Um formato compactado compatível com as plataformas mais populares. Ele pode fornecer taxas de compressão suficientemente altas, mantendo uma qualidade de som decente, mas é muito caro comprimir e descomprimir rapidamente.

Listei aqui apenas os formatos padrão de editor. Para obter mais informações sobre tipos e compactação específicos da plataforma, consulte a seção "Comentários" abaixo.

Aqui está uma breve comparação da carga do processador para diferentes formatos no meu PC no editor do Unity:

Formato de compressãoUso da CPU com 1 votoUso da CPU com 6 votos
PCM~ 0,05%~ 0,3%
ADPCM (compactado na memória)~ 0,2%~ 1,0%
Vorbis (compactado na memória)~ 0,5%~ 3,2%

Qualidade (não aplicável ao PCM / ADPCM)


  • 70-100%: quase indistinguível do PCM em qualidade total para todos, exceto os audiófilos com equipamento de áudio caro
  • 1-69%: variando o nível de qualidade, valores mais baixos criam artefatos repulsivos fortes de ruído, reduzem a dinâmica e tornam o som plano e sem vida. Você pode clicar no botão de visualização no painel do inspetor para ver quão notavelmente cai a qualidade de cada som específico.

Esses parâmetros de qualidade significam que o som será reproduzido a uma velocidade de 100%, portanto, eliminam algumas das altas frequências que geralmente estão fora da faixa audível. Mas, ao tocar em velocidade reduzida, eles mudam para o alcance audível. Se você planeja reproduzir o som com um tom / velocidade baixos, é melhor escolher a codificação no PCM.

Quanto menor a qualidade, mais fortes os arquivos são compactados:

Qualidade Vorbis% do tamanho originalTaxa de compressão
100~ 20%~ 5: 1
75~ 10%~ 10: 1
50.~ 7%~ 14: 1
25~ 4%~ 25: 1
1~ 2%~ 50: 1

Configuração da taxa de amostragem


  • Preservar: Usa a taxa de amostragem na qual o som é gravado.
  • Otimizar: o Unity analisa o som e encontra sua frequência máxima e, em seguida, usa o teorema de Nyquist para determinar a menor frequência de amostragem que pode ser aplicada sem perder essas frequências. Por exemplo, se a frequência sonora máxima for 10 kHz, a frequência de amostragem poderá ser reduzida sem perda de conteúdo sonoro para 20 kHz. Este parâmetro pode ser usado apenas para PCM / ADPCM.
  • Substituir: se desejar, você pode definir manualmente uma nova taxa de amostragem para o AudioClip. Em geral, eu não recomendo fazer isso se você não entender o que isso levará.


3. Configurações recomendadas para PC e consoles


Tipo de somCarregar em segundo plano
Tipo de cargaPré-carregar dados de áudioFormato de compressãoQualidadeConfiguração da taxa de amostragemObservações
DiálogosYComprimido na memóriaYVorbis70Preservar
Loops longos de sons do ambienten / aTransmissãon / aVorbis70Preservar
Sons surround únicosYDescomprimir na cargaYVorbis70Preservar
Efeitos de ruídoNComprimido na memóriaYPCMn / aOtimizarSe o tom desses sons já caiu, a frequência de amostragem deve ser mantida.
PassosNComprimido na memóriaYPCMn / aOtimizar
Música (músicas longas)n / aTransmissãon / aVorbis85PreservarA transmissão pode não ser apropriada se várias faixas de música estiverem sendo reproduzidas simultaneamente
Música (trechos curtos)YComprimido na memóriaYVorbis85Preservar
Vozes sem diálogo
Y
Descomprimir na carga
Y
Vorbis
70
Preservar
Efeitos especiais (SFX, curto)
N
Comprimido na memória
Y
PCM
n / a
Otimizar
Se o tom desses sons já caiu, a frequência de amostragem deve ser mantida.
Efeitos especiais (longos)
N
Descomprimir na carga
Y
Vorbis
70
Preservar
Sons da interface do usuário (longo)
Y
Descomprimir na carga
Y
Vorbis
70
Preservar
Sons da interface do usuário (curto)
N
Comprimido na memória
Y
PCM
n / a
Otimizar

Essas recomendações são adequadas para jogos em que existem até 10 mil clipes de som. Para a maioria dos sons, recomendo Descompactar ao carregar, ou seja, na RAM eles serão armazenados como dados de áudio descompactados. Se o tamanho total dos arquivos de som descompactados for maior que as limitações impostas à RAM, para os arquivos mais longos, você poderá selecionar o parâmetro Compressed in Memory. Mas lembre-se de que, a cada lançamento desse som, a carga da CPU aumentará um pouco. Uma versão em PDF dessas tabelas pode ser baixada aqui .

4. Configurações recomendadas para plataformas móveis


Tipo de som
Carregar em segundo plano
Tipo de carga
Pré-carregar dados de áudio
Formato de compressão
Qualidade
Configuração da taxa de amostragem
Observações
Diálogos
Y
Comprimido na memória
Y
Vorbis / MP3
50.
Preservar
Loops longos de sons do ambiente
Y
Comprimido na memória
Y
Vorbis
35
Preservar
Para sons sem ruído, use qualidade superior.
Sons surround únicos
Y
Descomprimir na carga
Y
Vorbis / MP3
50.
Preservar
Efeitos de ruído
N
Comprimido na memória
Y
PCM / ADPCM *
n / a
Preservar
Passos
N
Comprimido na memória
Y

PCM / ADPCM *


n / a
Otimizar
Música (músicas longas)
n / a
Transmissão
n / a
Vorbis
70
Preservar
Veja os avisos de streaming abaixo.
Música (trechos curtos)
Y
Comprimido na memória
Y
Vorbis / MP3
70
Preservar
Vozes sem diálogo
Y
Descomprimir na carga
Y
Vorbis / MP3
50.
Preservar
Efeitos especiais (SFX, curto)
N
Comprimido na memória
Y

PCM / ADPCM *


n / a
Otimizar
Se o tom desses sons já caiu, a frequência de amostragem deve ser mantida.
Efeitos especiais (longos)
N
Descomprimir na carga
Y
Vorbis / MP3
50.
Preservar
Sons da interface do usuário (longo)
Y
Descomprimir na carga
Y
Vorbis / MP3
50.
Preservar
Sons da interface do usuário (curto)
N
Comprimido na memória
Y
PCM / ADPCM *
n / a
Otimizar

* Se você não sabe o que escolher, PCM ou ADPCM, consulte a descrição do formato ADPCM na seção "Compreendendo os parâmetros" acima. Se ainda não for necessário economizar espaço em disco, recomendo inclinar-se para o PCM.

Essas diretrizes funcionarão bem na maioria dos jogos para celular; pelo menos eles podem ser usados ​​como ponto de partida. Se você acha que esses parâmetros podem não ser adequados para o seu jogo, leia as descrições completas dos parâmetros acima. Uma versão em PDF dessas tabelas pode ser baixada aqui .

5. Cuidados e observações


Advertências


  • O streaming simultâneo (streaming) de vários arquivos de áudio representa uma carga bastante pequena nos processadores em PCs e consoles, mas pode criar um problema sério em plataformas móveis (especialmente em dispositivos antigos ou baratos). Abaixo está um gráfico das minhas medidas no criador de perfil do Unity. Ele avalia o impacto da transmissão de vários arquivos de áudio em vários telefones Samsung Galaxy e no meu PC. O primeiro gráfico mostra 1-12 fontes de áudio reproduzidas simultaneamente, o segundo - 1-3 fontes em uma escala ampliada.



  • Se o som estiver definido como Descompactar ao carregar, o uso da compactação Vorbis reduzirá seu tamanho em dez vezes no disco, mas não na RAM, onde os dados brutos do PCM ainda serão armazenados. Se você definir o parâmetro Compressed in Memory, poderá economizar RAM, mas ao custo do tempo da CPU, que descompacta o som em tempo real.
  • Cada tipo de dado, com exceção do Streaming, carrega o som na RAM e o deixa lá até a cena ser descarregada. Se o jogo inteiro for jogado em um grande palco, os sons poderão preencher toda a RAM disponível. Pior, a exclusão manual de clipes de som da RAM é extremamente ineficiente e pode levar a uma queda na taxa de quadros, o que pode acontecer se você atribuir essa tarefa ao coletor de lixo. Se você possui muitos dados de áudio, pode ser necessário executar uma otimização para reduzir a RAM usada em outras áreas usando o Unity AssetBundles. O parâmetro Preload Audio Data também não pode alterar isso, porque determina apenas quando os dados são carregados na RAM e não o que acontece com eles posteriormente.
  • Se a plataforma de destino suportar o formato MP3, observe que o loop automático não é realizado, portanto, não recomendo o uso da compactação MP3 para loops atmosféricos e musicais. Devido à natureza da codificação MP3, uma parte sem som é frequentemente adicionada ao final do arquivo para que o número total de amostras seja dividido igualmente em "quadros" de 1.152 amostras. Existem maneiras de criar loops de MP3 sem costura, mas este é um tópico para outro guia.
  • Quando você desativa o Pré-carregamento de dados de áudio e ativa o Carregamento em segundo plano, os arquivos grandes não são reproduzidos imediatamente, mas a carga do processador não aumenta. Isso ocorre porque leva tempo para fazer o download, mas o thread principal nesse caso não está ocioso.
  • Ao desativar o Pré-carregamento de dados de áudio e o Carregamento em segundo plano, arquivos grandes na primeira chamada ocupam o fluxo principal. No entanto, isso não é um problema ao usar o FMOD, que executa a decodificação em um fluxo separado.

Observações


Formatos de compressão:

  • Ao importar arquivos para o Unity, eles sempre devem estar em um formato não compactado, por exemplo, em WAVE (.wav) ou AIFF (.aiff). Muitos formatos compactados são formatos com perdas , ou seja, quando são codificados, as informações são perdidas. Se você importar um arquivo compactado, como MP3 ou Vorbis, para o Unity, primeiro o Unity o decodificará em um formato não compactado e o codificará novamente no formato de sua escolha, mesmo que este seja o mesmo formato a partir do qual você iniciou. Isso pode adicionar novos artefatos de compactação, o que geralmente é indesejável.
  • A documentação do middleware AudioKinetic Wwise tem um excelente artigo sobre vários formatos de compactação de som, seus prós e contras e plataformas suportadas.
  • Se você usa o FMOD, terá acesso ao formato FADPCM, que é muito melhor que o antigo formato ADPCM. No entanto, ele não está embutido no Unity.
  • Você pode usar, por exemplo, MP3 em vez de Vorbis no seu iPhone, porque ele possui um decodificador de MP3 de hardware que permite ao processador não descompactar arquivos MP3 armazenados na RAM ou no disco. Mas tenha cuidado - isso pode não ser adequado para sons em loop (consulte a seção "Cuidados" acima); Além disso, ele pode decodificar apenas um MP3 por vez. Se você precisar descompactar vários MP3s ao mesmo tempo, esta operação será realizada programaticamente, como no caso do Vorbis. Isso não deve apresentar problemas sérios, mas é importante notar que a decodificação MP3 carrega o processador um pouco mais do que a decodificação Vorbis.
  • Se a plataforma de destino for Playstation 4, o formato ATRAC9 fornece uma taxa de compactação bastante alta com menos carga de CPU que Vorbis ou MP3.
  • Para o Xbox One, o formato XMA da Microsoft é um bom substituto para o Vorbis ou MP3. Microsoft 8:1 15:1.

:

  • PCM ( ) Compressed in Memory. Decompress on Load , , Streaming.
  • , FMOD Wwise , Unity ( - ).
  • « » (Foley), , , . , . , , .
  • (Sample Rate), Unity . , 100%, Optimise Sample Rate, / , . , , .

Source: https://habr.com/ru/post/pt437474/


All Articles