Optimice el rendimiento del juego con las opciones de importación de sonido de Unity

imagen

Los desarrolladores generalmente no entienden completamente las opciones para importar sonido a Unity, y al momento de escribir esto, no pude encontrar una sola guía detallada para su uso. La documentación de Unity describe bien lo que hacen las opciones de importación de sonido, pero me gustaría analizar estas descripciones para un público más amplio, así como explicar con más detalle cómo aplicar estos parámetros para aprovechar al máximo el juego.

Este documento está dividido en cinco partes:

  1. Cómo afecta el sonido al rendimiento
  2. Nos ocupamos de las opciones de importación
  3. Mis configuraciones recomendadas para PC y consolas
  4. Mi configuración recomendada para plataformas móviles
  5. Precauciones y notas

La optimización de las opciones de importación de sonido de Unity es uno de los métodos de optimización más fáciles. En el caso de un proyecto pequeño, puede llevar menos de una hora lograr mejoras significativas en el tiempo de arranque, la RAM y otros aspectos de rendimiento. Espero que esta guía te sea útil. La información es relevante para Unity versión 2018.3

1. Cómo afecta el sonido al rendimiento


Los datos de sonido son voluminosos. En muchos juegos, los datos de audio ocupan la mayor parte del espacio en disco (disco / cartucho / disco óptico donde se almacenan los datos del juego) y RAM (memoria de trabajo del sistema). Pero no solo eso, también cargan seriamente la CPU, especialmente si usa los efectos de DSP (procesamiento de sonido en tiempo real), y también aumentan enormemente el tiempo de carga.

En estas tres áreas (espacio en disco ocupado por RAM, uso de CPU), la optimización es un tira y afloja de tres vías similar al problema "bueno-barato-rápido" . Si algún aspecto del juego te causa el mayor daño, puedes mantener la efectividad de un aspecto sacrificando otro. Por ejemplo, si el sonido sin comprimir ocupa demasiada RAM, puede almacenarlo en forma comprimida Vorbis; esto ahorra espacio en la RAM, pero a costa de la carga de la CPU, porque acceder al archivo comprimido requiere más potencia de procesamiento para decodificarlo. A continuación se muestra un cuadro con varios parámetros y su efecto en estas tres áreas:


Vale la pena considerar que este diagrama no nos dice nada sobre el ancho de banda de los datos leídos del disco / RAM.

En realidad, hay algunos matices más, pero el diagrama debería darle una idea general de cómo están interconectados estos problemas. Para comprender cómo usar estos parámetros (y tratar problemas como el tiempo de carga demasiado largo), debe considerar cada una de las opciones de importación de sonido en detalle.

2. Comprender las opciones de importación


Cuando selecciona AudioClip en el editor de Unity, aparece el siguiente panel en la ventana del inspector:


A continuación hay una lista de opciones de sonido de arriba a abajo con una descripción de lo que hacen:

Fuerza a mono


  • Sí: si AudioClip se graba en estéreo (o con un número diferente de canales), este parámetro combina todos los canales en un canal mono.
  • No: el número de canales no cambia.

En mi trabajo como diseñador de sonido, nunca reduzco la señal de audio a mono porque creo sonidos para un propósito específico. Pero si usa sonidos estándar de las existencias y desea habilitar este parámetro, asegúrese de que el archivo mono no suene plano y extraño debido a la interacción interfacial de los canales izquierdo y derecho. Puede obtener una vista previa del sonido procesado haciendo clic en el botón Reproducir en la esquina inferior derecha de la ventana del inspector; si escucha distorsión de fase, puede intentar separar el sonido en un editor de audio de terceros y exportar individualmente los canales izquierdo y derecho como sonido mono.

Normalizar (solo disponible cuando Force to Mono está activado)


  • Sí: ajusta la ganancia de AudioClip para que el sonido monoaural tenga el mismo volumen que el archivo estéreo original.
  • No: no ajusta la ganancia.

Si usa Force to Mono, entonces normalmente vale la pena activar la normalización. Un archivo estéreo fuerte cuando se mezcla a mono puede volverse aún más alto, exceder la amplitud máxima y provocar una distorsión digital nítida, lo que no es deseable.

Cargar en segundo plano / precargar datos de audio


Estos parámetros tienen un efecto directo entre sí, por lo que los combiné.
Carga en segundo planoPrecargar datos de audioResultado
HabilitadoHabilitadoCuando se carga una escena, los clips de sonido con este parámetro comienzan a cargarse, pero no detienen la transmisión principal. Si para cuando la escena está completamente cargada, no se han cargado todas, entonces la descarga continuará en segundo plano cuando la escena ya se esté ejecutando. Si el sonido no está cargado, pero ya se está ejecutando, entonces se comportará de la misma manera que cuando se deshabilitó la precarga (consulte la línea a continuación).
HabilitadoDiscapacitadosCuando un sonido comienza por primera vez, se cargará en segundo plano y se reproducirá cuando esté listo. Si el archivo es grande, puede haber un retraso notable entre el inicio y la reproducción, pero con las reproducciones posteriores del archivo todo estará bien.
DiscapacitadosHabilitadoEl sonido se carga mientras se carga la escena. La escena no comenzará hasta que todos los sonidos con este parámetro activado estén cargados en la memoria.
DiscapacitadosDiscapacitadosCuando se inicia el sonido por primera vez, usa la transmisión principal para cargarse en la memoria; si el archivo es grande, esto puede causar una desaceleración de los cuadros, pero en reproducciones posteriores todo estará bien.

Recomiendo usar esta configuración solo para archivos muy pequeños, pero incluso en este caso, vale la pena medir su efecto en el rendimiento en el generador de perfiles, y pensar si se puede iniciar una gran cantidad de tales sonidos simultáneamente, aumentando la carga en el rendimiento.

Ambisónico


  • Marque esta casilla si el sonido está codificado en Ambisonic. Los sonidos ambisónicos son útiles para VR, AR, video panorámico, etc., pero este parámetro no está relacionado con nuestro manual.

Opciones específicas de plataforma


  • Estas pestañas le permiten establecer parámetros predeterminados y parámetros específicos de la plataforma para las configuraciones que se enumeran a continuación. Algunas plataformas tienen formatos de compresión que no están disponibles en otras; algunas pueden tener otros equipos que requieren una optimización diferente. Para la compresión específica de la plataforma, consulte las notas a continuación.
  • Compruebe siempre los parámetros específicos de la plataforma, incluso si desea utilizar parámetros comunes; a veces, Unity puede establecer automáticamente parámetros específicos de la plataforma. Por ejemplo, las compilaciones para iOS pueden predeterminar "especificar la frecuencia de muestreo: 22 kHz", lo que puede dar lugar a alias (un defecto de sonido derivado de una disminución de muestreo incorrecta).

Tipo de carga


  • Descomprimir al cargar: el sonido se almacena en el disco en el formato de compresión especificado, pero se desempaqueta y se carga en la RAM sin comprimir en formato PCM. Esto consume mucha RAM y aumenta ligeramente el tiempo de arranque, pero de manera muy económica desde el punto de vista del procesador, y el acceso es muy rápido.
  • Comprimido en la memoria: tanto en el disco como en la RAM, el sonido se almacena en el formato de compresión especificado. El lugar y el tiempo de carga ocupados en la RAM se reducen, pero la carga del procesador aumenta durante la reproducción del sonido, ya que se debe desempaquetar en cada reproducción.
  • Streaming: la transmisión de audio se reproduce directamente desde el disco, sin pasar por RAM. Esto ocupa parte del ancho de banda del disco y los recursos de la CPU, pero en PC y consolas no afecta significativamente el rendimiento, siempre que no se transmitan más de dos sonidos simultáneamente. En plataformas móviles (especialmente en dispositivos baratos y antiguos), la transmisión simultánea de varios archivos estéreo carga mucho el procesador (consulte la sección "Precauciones" a continuación).

Formato de compresión


  • PCM: datos de audio sin procesar, completamente desempaquetados y ocupan mucho espacio en el disco y en la RAM, pero prácticamente no necesita ningún costo para reproducirlos, ya que no es necesario desempaquetarlos.
  • ADPCM: un formato de compresión muy antiguo con una relación de compresión de 3.5: 1. La compresión / descompresión es bastante económica en comparación con Vorbis u otros formatos de compresión, pero introduce artefactos de ruido digital en el sonido, por lo que debe usarlo solo en "sonidos ruidosos", en los que no se notará. Si no está seguro de si ADPCM es adecuado para un sonido en particular, habilite la escucha previa del sonido en formatos PCM y ADPCM; si escucha una diferencia, le recomiendo elegir PCM.
  • Vorbis: un formato comprimido compatible con las plataformas más populares. Puede proporcionar relaciones de compresión suficientemente altas, manteniendo una calidad de sonido decente, pero es bastante costoso comprimir y descomprimir sobre la marcha.

He enumerado aquí solo los formatos de editor estándar, para obtener más información sobre los tipos específicos de plataforma y la compresión, consulte la sección "Comentarios" a continuación.

Aquí hay una breve comparación de la carga del procesador para diferentes formatos en mi PC en el editor de Unity:

Formato de compresiónUso de CPU con 1 votoUso de CPU con 6 votos
PCM~ 0.05%~ 0.3%
ADPCM (comprimido en memoria)~ 0.2%~ 1.0%
Vorbis (comprimido en memoria)~ 0.5%~ 3.2%

Calidad (no aplicable a PCM / ADPCM)


  • 70-100%: casi indistinguible de PCM en calidad total para todos, excepto los audiófilos con equipos de audio caros
  • 1-69%: nivel de calidad variable, valores más bajos crean fuertes artefactos repulsivos de ruido, reducen la dinámica y hacen que el sonido sea plano y sin vida. Puede hacer clic en el botón de vista previa en el panel del inspector para ver cuán notablemente disminuye la calidad de cada sonido en particular.

Estos parámetros de calidad significan que el sonido se reproducirá a una velocidad del 100%, por lo que cortan algunas de las frecuencias altas que generalmente están fuera del rango audible. Pero cuando juegan a velocidad reducida, cambian al rango audible. Si planea reproducir sonido con un tono / velocidad bajos, es mejor elegir la codificación en PCM.

Cuanto menor es la calidad, más fuertes se comprimen los archivos:

Calidad Vorbis% del tamaño originalRelación de compresión
100~ 20%~ 5: 1
75~ 10%~ 10: 1
50~ 7%~ 14: 1
25~ 4%~ 25: 1
1~ 2%~ 50: 1

Ajuste de frecuencia de muestreo


  • Conservar: utiliza la frecuencia de muestreo a la que se graba el sonido.
  • Optimizar: Unity analiza el sonido y encuentra su frecuencia máxima, y ​​luego usa el teorema de Nyquist para determinar la frecuencia de muestreo más baja que se puede aplicar sin perder estas frecuencias. Por ejemplo, si la frecuencia de sonido máxima es de 10 kHz, la frecuencia de muestreo se puede reducir sin pérdida de contenido de sonido a 20 kHz. Este parámetro solo se puede usar para PCM / ADPCM.
  • Anulación: si lo desea, puede establecer manualmente una nueva frecuencia de muestreo para AudioClip. En general, no recomiendo hacer esto si no comprende a lo que esto conducirá.


3. Configuración recomendada para PC y consolas


Tipo de sonidoCarga en segundo plano
Tipo de cargaPrecargar datos de audioFormato de compresiónCalidadAjuste de frecuencia de muestreoObservaciones
DiálogosYComprimido en la memoriaYVorbis70Preservar
Largos bucles de sonidos ambientales.n / aStreamingn / aVorbis70Preservar
Sonidos envolventes únicosYDescomprimir en cargaYVorbis70Preservar
Efectos de ruidoNComprimido en la memoriaYPCMn / aOptimizarSi el tono de estos sonidos alguna vez ha disminuido, entonces se debe mantener la frecuencia de muestreo.
PasosNComprimido en la memoriaYPCMn / aOptimizar
Música (canciones largas)n / aStreamingn / aVorbis85PreservarLa transmisión puede no ser apropiada si se reproducen varias pistas de música simultáneamente
Música (fragmentos cortos)YComprimido en la memoriaYVorbis85Preservar
Voces sin diálogo
Y
Descomprimir en carga
Y
Vorbis
70
Preservar
Efectos especiales (SFX, corto)
N
Comprimido en la memoria
Y
PCM
n / a
Optimizar
Si el tono de estos sonidos alguna vez ha disminuido, entonces la frecuencia de muestreo debe mantenerse.
Efectos especiales (largos)
N
Descomprimir en carga
Y
Vorbis
70
Preservar
IU suena (largo)
Y
Descomprimir en carga
Y
Vorbis
70
Preservar
IU suena (corto)
N
Comprimido en la memoria
Y
PCM
n / a
Optimizar

Estas recomendaciones son adecuadas para juegos donde hay hasta 10 mil clips de sonido. Para la mayoría de los sonidos, recomiendo Descomprimir al cargar, es decir, en la RAM se almacenarán como datos de audio desempaquetados. Si el tamaño total de los archivos de sonido desempaquetados es mayor que las limitaciones impuestas a la RAM, para los archivos más largos, puede seleccionar el parámetro Comprimido en memoria. Pero tenga en cuenta que con cada lanzamiento de dicho sonido, la carga de la CPU aumentará ligeramente. Puede descargar una versión en PDF de estas tablas desde aquí .

4. Configuración recomendada para plataformas móviles


Tipo de sonido
Carga en segundo plano
Tipo de carga
Precargar datos de audio
Formato de compresión
Calidad
Ajuste de frecuencia de muestreo
Observaciones
Diálogos
Y
Comprimido en la memoria
Y
Vorbis / MP3
50
Preservar
Largos bucles de sonidos ambientales.
Y
Comprimido en la memoria
Y
Vorbis
35
Preservar
Para sonidos sin ruido, use mayor calidad.
Sonidos envolventes únicos
Y
Descomprimir en carga
Y
Vorbis / MP3
50
Preservar
Efectos de ruido
N
Comprimido en la memoria
Y
PCM / ADPCM *
n / a
Preservar
Pasos
N
Comprimido en la memoria
Y

PCM / ADPCM *


n / a
Optimizar
Música (canciones largas)
n / a
Streaming
n / a
Vorbis
70
Preservar
Vea las advertencias de transmisión a continuación.
Música (fragmentos cortos)
Y
Comprimido en la memoria
Y
Vorbis / MP3
70
Preservar
Voces sin diálogo
Y
Descomprimir en carga
Y
Vorbis / MP3
50
Preservar
Efectos especiales (SFX, corto)
N
Comprimido en la memoria
Y

PCM / ADPCM *


n / a
Optimizar
Si el tono de estos sonidos alguna vez ha disminuido, entonces se debe mantener la frecuencia de muestreo.
Efectos especiales (largos)
N
Descomprimir en carga
Y
Vorbis / MP3
50
Preservar
IU suena (largo)
Y
Descomprimir en carga
Y
Vorbis / MP3
50
Preservar
IU suena (corto)
N
Comprimido en la memoria
Y
PCM / ADPCM *
n / a
Optimizar

* Si no sabe qué elegir, PCM o ADPCM, consulte la descripción del formato ADPCM en la sección "Comprender los parámetros" más arriba. Si todavía no se necesita desesperadamente ahorrar espacio en disco, recomiendo inclinarse hacia PCM.

Estas pautas funcionarán bien en la mayoría de los juegos móviles; al menos se pueden usar como punto de partida. Si crees que estos parámetros pueden no ser adecuados para tu juego, lee las descripciones completas de los parámetros anteriores. Puede descargar una versión en PDF de estas tablas aquí .

5. Precauciones y comentarios


Advertencias


  • La transmisión simultánea (Streaming) de varios archivos de audio representa una carga bastante pequeña en los procesadores en PC y consolas, pero puede crear un problema grave en las plataformas móviles (especialmente en dispositivos baratos o viejos). A continuación se muestra un gráfico de mis mediciones en el generador de perfiles de Unity. Evalúa el impacto de transmitir múltiples archivos de audio en varios teléfonos Samsung Galaxy y mi PC. El primer gráfico muestra 1-12 fuentes de audio reproducidas simultáneamente, el segundo - 1-3 fuentes en una escala ampliada.



  • Si el sonido está configurado para Descomprimir al cargar, el uso de la compresión Vorbis reducirá su tamaño diez veces en el disco, pero no en la RAM, donde los datos PCM sin procesar aún se almacenarán. Si configura el parámetro Comprimido en memoria, puede ahorrar RAM, pero a costa del tiempo de CPU, que desempaqueta el sonido sobre la marcha.
  • Cada tipo de datos, con la excepción de Streaming, por defecto carga el sonido en la RAM y lo deja allí hasta que se descarga la escena. Si todo el juego se juega en un gran escenario, entonces los sonidos pueden llenar toda la RAM disponible. Peor aún, la eliminación manual de clips de sonido de la RAM es extremadamente ineficiente y puede provocar una caída en la velocidad de fotogramas, lo que puede suceder si asigna esta tarea al recolector de basura. Si tiene una gran cantidad de datos de audio, es posible que deba realizar una optimización para reducir la RAM utilizada en otras áreas utilizando los Unity AssetBundles. El parámetro Preload Audio Data tampoco puede cambiar esto, porque determina solo cuándo se cargan los datos en la RAM y no qué les sucede después.
  • Si la plataforma de destino admite el formato MP3, tenga en cuenta que no se realiza un bucle automático, por lo tanto, no recomiendo usar la compresión MP3 para bucles atmosféricos y musicales. Debido a la naturaleza de la codificación de MP3, a menudo se agrega una pieza sin sonido al final del archivo para que el número total de muestras se divida de manera uniforme en "cuadros" de 1.152 muestras. Hay formas de crear bucles de MP3 sin interrupciones, pero este es un tema para otra guía.
  • Cuando desactive Precargar datos de audio y active Cargar en segundo plano, los archivos grandes no se reproducirán inmediatamente, pero la carga del procesador no aumentará. Esto se debe a que la descarga lleva tiempo, pero el hilo principal en este caso no está inactivo.
  • Al desactivar Precargar datos de audio y desactivar Cargar en segundo plano, los archivos grandes en la primera llamada ocupan la transmisión principal. Sin embargo, esto no es un problema cuando se usa FMOD, que realiza la decodificación en una secuencia separada.

Observaciones


Formatos de compresión:

  • Al importar archivos a Unity, siempre deben estar en un formato sin comprimir, por ejemplo, en WAVE (.wav) o AIFF (.aiff). Muchos formatos comprimidos son formatos con pérdida, es decir, cuando se codifican, se pierde información. Si importa un archivo comprimido, como MP3 o Vorbis, a Unity, Unity primero lo decodifica en un formato sin comprimir y luego lo vuelve a codificar en el formato que elija, incluso si este es el mismo formato desde el que comenzó. Esto puede agregar nuevos artefactos de compresión, que generalmente no es deseable.
  • La documentación del middleware AudioKinetic Wwise tiene un excelente artículo sobre varios formatos de compresión de sonido, sus pros y sus contras, y las plataformas compatibles.
  • Si usa FMOD, entonces tiene acceso a su formato FADPCM, que es mucho mejor que el antiguo formato ADPCM. Sin embargo, no está integrado en la Unidad.
  • Es posible que desee utilizar, por ejemplo, MP3 en lugar de Vorbis en su iPhone, ya que tiene un decodificador de hardware de MP3 que le permite al procesador no descomprimir archivos MP3 almacenados en la RAM o en el disco. Pero tenga cuidado: esto puede no ser adecuado para los sonidos en bucle (consulte la sección "Precauciones" más arriba); Además, solo puede decodificar un MP3 a la vez. Si necesita descomprimir varios MP3 al mismo tiempo, esta operación se realizará mediante programación, como en el caso de Vorbis. Esto no debería presentar ningún problema serio, pero vale la pena señalar que la decodificación de MP3 carga el procesador un poco más que la decodificación de Vorbis.
  • Si la plataforma de destino es Playstation 4, el formato ATRAC9 proporciona una relación de compresión bastante alta con menos carga de CPU que Vorbis o MP3.
  • Xbox One Vorbis MP3 Microsoft XMA. 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/437474/


All Articles