Tutorial Wwise en Español - Parte VII: Optimizacion

Note for my english readers: Sorry this article is not in your language but I wanted to write something for the spanish speaking community since there aren’t many resources on game audio in my native tongue. If I see that there is demand, I would be happy to translate this into english although most of the content can be found in Audiokinetic’s official resources.

Introducción

Llegamos ya a la ultima parte de esta serie, espero que te haya servido de ayuda para entender Wwise un poco mejor. En esta última entrega vamos a ver como podemos optimizar el uso de memoria y CPU para que el sonido de nuestro juego sea lo más eficiente posible.

Como la optimizacion sólo tiene sentido cuando tenemos un proyecto de mayores dimensiones, vamos a usar uno de los proyectos del curso oficial de Wwise. Los puedes encontrar en este link. Una vez lo descargues, abre el proyecto de Wwise de la leccion 7. Echa un ojo al proyecto e intenta entender para que sirve cada cosa y como funcionan los distintos eventos y objetos sonoros, con todo lo que has aprendido ya deberias poder moverte por aqui con comodidad.

Usando diferentes bancos

Una de las formas mas obvias de optimizacion es el uso de bancos. Hasta ahora, hemos puesto todos los sonidos en un mismo banco, pero para un juego completo esto no es una solucion muy eficiente. Una buena opcion podria ser tener una banco “master” o “main” que siempre cargamos y luego bancos específicos por cada nivel o area del juego. En general, siempre que en un juego haya una pantalla de carga, esta es una buena oportunidad para cargar bancos.

En el caso del proyecto que tenemos, no hay creado ningún banco todavia por lo que empezaremos por crear un banco “main” o principal que alojará los sonidos que queremos siempre disponibles. También vamos a crear otro banco para un nivel concreto del juego. Vamos a ello.

Dentro del Layout “Designer”, ve a la pestaña “SoundBanks”. Verás que bajo la “Default Work Unit”, no existe ningún banco. Crea dentro de ella un banco llamado “Main” y otro llamado “DCP_the_core”. Te recuerdo que estos nombres deben ser exactos puesto que el juego está llamándolos desde el código.

Una vez creados, ve al layout “SoundBanks” (o pulsa F7). Si despliegas la “Default Work Unit”, verás los dos bancos que hemos creado. Por ahora están vacíos, ya que debemos especificar qué eventos queremos asociar con ellos. Por ello, bajo la columna “Data Size”, aparece un tamaño de “0”. Fíjate también que podemos determinar un tamaño máximo por cada banco (“Max Size"), aunque por ahora el tamaño no está limitado por lo que aparece como infinito.

En algunas ocasiones, especialmente en juegos para consolas, sabremos mas o menos con cuanta memoria contamos para el audio del juego por lo que podremos espcificar el tamaño máximo de los bancos, o al menos hacer una aproximación. Vamos a establecer un tamaño de 9.000.000 para el banco “Main” y de 6.000.000 para el “DCP_the_core”.

Ahora podemos asignar los eventos a cada banco. En la parte inferior izquierda de este layout, verás que podemos ver todos los eventos del proyecto. Si te fijas, verás que todos los eventos del nivel que estamos construyendo (“DCP_the_core”) tienen un prefijo “DCP” que nos indica que pertenecen a este nivel. Esta es una forma muy conveniente de nombrar a los eventos ya que de esta manera, queda claro que solo son usados en este nivel. Arrástralos al banco. El resto de eventos pueden ir al banco “Main”.

Verás que por ahora, el tamaño no ha cambiado. Esto es por que necesitamos construir los bancos primero. Selecciona la plataforma e idioma y haz click en “Generate All” para construirlos. Una vez hecho esto, como puedes ver, nuestros bancos son demasiado grandes para el límite que habíamos puesto. Ten en cuenta, que esto no nos impediría en ningún caso usar estos bancos en el juego. El límite de tamaño es simplemente una constricción que nos hemos puesto nosotros mismos para que sea más fácil mantenernos en el gasto de memoria que nos hemos propuesto. Veamos entonces cómo reducir el tamaño de nuestros bancos.

Ajustes de conversion (calidad de audio y incluir/excluir audio)

He comentado varias veces en entregas anteriores que es importante usar en Wwise audio en su calidad original (a ser posible sin comprimir y en wav). El principal motivo es que cuando construimos nuestros bancos, Wwise no usa los archivos tal cual, sino que los convierte en un formato comprimido dependiendo de la calidad que le indiquemos. Por ello, esta conversión es uno de las formas más fáciles de reducir nuestros bancos.

Desde el layout “Designer”, ve a la pestaña “SharedSets” que recordarás de cuando vimos las curvas de atenuación. Verás que una de las secciones aquí es “Conversion Settings”. Bajo la “Default Work Unit” vamos a crear un nuevo ajuste de conversión llamado “SFX”.

Este será el ajuste que usemos para nuestros efectos de sonido. Primero, vamos a ver a qué elementos en concreto queremos aplicarlo. Volvemos a la pestaña “Audio” y verás un Actor-Mixer llamado “Weapons”. Selecciónalo y ve a la pestaña “Conversion”. Esta es una de las pocas pestañas que nos quedaba por ver en este panel.

Una vez aquí, podemos cambiar la configuración de conversión para este Actor-Mixer en concreto. Verás que por defecto, de usa el “Default Conversion Settings” que es el SharedSet que se crea en cualquier proyecto de Wwise vacío. Pero nosotros queremos usar el nuestro por lo que haz click en el botón con las dos flechas (>>) y elige el que acabamos de crear (“SFX”).

Una vez elegido, haz click en “Edit…”. En esta ventana podemos ver los ajustes de conversión y todos los objetos que ser verían afectados. Hay muchas cosas distintas que se pueden aplicar para reducir el tamaño de los archivos. Podemos convertir archivos stereo en mono, bajar la frecuencia de muestreo o cambiar el formato de compresión. Verás también que podemos elegir distintos ajustes para cada plataforma (windows, mac, consolas, etc…) Esto es muy útil ya que ciertas plataformas pueden ofrecernos más espacio que otras y así podemos estar listos para cada una de ellas desde el mismo proyecto de Wwise.

En nuestro caso, lo que más rápidamente va a reducir nuestro tamaño es el formato, Por ahora, verás “PCM”, lo cual significa que no estamos aplicando ninguna compresión al audio. Cambia esto por un formarto “Vorbis”, que es un formato comprimido como lo es mp3.. Esta opción nos permitirá construir bancos más ligeros sacrificando sólo un poco de calidad de sonido. Por defecto, la calidad es “4” y este valor es un buen compromiso entre tamaño y fidelidad, pero se puede cambiar si es necesario. Una vez listo, haz click en “Convert…” en la parte central derecha.. Elige tus plataformas (si ves mas de una, elige todas) y “OK”. Ahora podemos ver el tamaño original de cada archivo de audio y el convertido. Verás que los archivos son ahora notablemente más ligeros.

Para ver el impacto que esto tiene en nuestros bancos, vuelve al layout “SoundBanks” y construye de nuevo. Nuestro banco “Main” ya cumple con los requisitos que habíamos establecido mientras que nuestro otro banco especíco del nivel es aún demasiado grande. Esto los solucionaremos en breve pero mientras hay un par de conceptos con los que es importante que te quedes.

Por un lado, este SharedSet de conversión que hemos creado se pueden aplicar a cualquier otro conjunto de sonidos por lo que esta sistema es muy cómodo a la hora de asignar distintos niveles de compresión a distintos elementos. Por ejemplo, podríamos usar unos ciertos ajustes para nuestros efectos sonoros, otros para el diálogo del juego y finalmente otros para la música.

Por otro lado, ten en cuenta que en todo momento, puedes elegir si prefieres monitorizar un objeto sonoro con sus archivos sonoros asociados originales o ya convertidos. Al reproducir cualquiera de estos objetos, verás que el transporte tiene un botón que dice “Original”. Si el botón está encendido (como en la imagen inferior) esto implica que estás monitorizando el audio sin ninguna compresión. Si lo apagas, estarás oyendo el audio ya comprimido lo cual te puede dar una mejor idea de cómo sonará realmente en el juego.

Streaming

Normalmente, mientras se juega, los archivos de audio se cargan el la memoria RAM de forma que se pueda acceder a ellos de forma muy rápida. Esto es una buena solución para archivos pequeños ya que los necesitamos muy rápido (sonido de pasos, disparos, etc…) pero no ocupan demasiado espacio en al RAM.

En el caso de archivos de sonido grandes como ambientes o música esta solución no es tan adecuada ya que llenaremos la RAM demasiado y ten en cuenta que también la necesitamos para los gráficos. Por ello, en el caso de estos archivos grandes podemos llamarlos directamente desde el disco duro y así liberar RAM.

Hagamos esto con la música de nuestro juego para ahorrar memoria. Si recuerdas cuando construimos el banco de nuevo, aun nos pasábamos de nuestro límite ya que este representa a la memoria RAM del usuario final.

En el layout “Designer”, busca la musica (“Cube Main Theme”). En la pestaña general del “Property Editor” verás a la derecha “Stream”. Selecciona esta opción. No es necesario cambiar los ajustes. Una vez hecho, vuelve a contruir los bancos y ahora si que estamos dentro de los límites de memoria que nos hemos marcado, ya que el objeto no se cargará en RAM.

Optimizando gasto en CPU

Hasta ahora, todos los ajustes que hemos hecho nos han permitido usar menos memoria pero otro aspecto que podemos usar es el uso de la CPU. Cuando el juego está funcionando hay una serie de cálculos constantes que se hacen como la distancia entre objetos, transformar sonidos usando EQ o reverbs o simplemente reproducir un objeto sonoro.

Cada uno de estos objetos ocupa una “Voice” o voz. Cada una de estas voces es la unidad mas pequeña posible que canaliza un determinado sonido. Como te puedes imaginar un juego usará muchas voces, cientos de ellas, pero siempre tendremos un límite físico a cuantas de ellas podemos usar a al vez. Esto dependerá de la potencia de la CPU del usuario, que puede ser no muy grande, por lo que nuestro trabajo consiste en crear el mejor sonido posible usando una carga mínima en la CPU.

Algo que podemos ajustar para limitar el uso de voces es dejar de usarlas si el sonido contenido en ellas está demasiado distante a la jugadora y por lo tanto apenas se oye. Vamos a ver cómo podemos controlar esto. Haz click en “Project > Project Settings” o Shift + K. Verás dos opciones importantes “Volume Threshold” y “Max Voice Instances”

La primera controla a qué volumen dejará de existir cada voz mientras que la segunda especifica cuantas voces pueden existir a la vez. Como puedes ver, esto es ajustable por plataforma, permitiéndonos de nuevo optimizar el gasto de CPU para usuarios en consolas o móviles. Vamos a cambiar el umbral de volumen a -50 y las voces máximas a 40.

Como puedes imaginar, con esto estamos reduciendo el rango dinámico de nuestro juego. Ahora la diferencia entre el sonido más fuerte y el más débil será de 50dB como mucho. Reducir el numero de voces también reduce drásticamente el gasto de CPU aunque esto puede ser un problema por que en el momento en el que Wwise se quede sin voces puede dejar de disparar sonidos que son muy importantes como los diálogos. Por otro lado, ciertos eventos como una ametralladora van a usar montones de voces y esto puede hacer que nos quedemos rápidamente sin ellas.

Ve al Actor-Mixer llamado “Weapons” y a la pestaña “Advanced Settings” (que por cierto es la última que nos quedaba por ver).

Verás que aqui podemos establecer un límite para el número de instancias que queremos de un sonido o conjunto de sonidos. Haz click en “Limit sound instances to:”, elige 25 y “Globally”. Esto significa que en el juego nunca habrá más de 25 instancias de objetos sonoros de este Actor-Mixer lo que nos garantiza que no acapare procesamiento de CPU.

Por otro lado, podemos también querer darle una prioridad alta a ciertos sonidos como la música. Para ello, ve al objeto que contiene la música y en la misma pestaña, dale una prioridad de 80. Con esto le decimos a Wwise que si necesita voces para nuevos sonidos que se están disparando, la música nunca sea parada.

Sumario

¡Y esto es todo! En esta séptima y última parte, hemos visto cómo optimizar el uso de CPU y memoria, lo cual es crucial para que nuestro juego funcione lo mejor posible en cualquier plataforma.. Si tienes dudas o cualquier problema, puedes escribirme a contactme [ arroba ] javierzumer.com. Mientras tanto, dejo por aquí un glosario con todos los conceptos que he ido introduciendo en esta parte.

  • Conversion Settings: Objeto de tipo “SharedSets” que nos permite elegir cómo queremos compirmir el audio en nuestros bancos.

  • Stream: Cuando un objeto sonoro se repoduce en este modo, no se está cargando en la RAM sino que se llama directamente desde el disco duro, lo cual nos permite ahorrar espacio en memoria.

  • Voces: La unidad mas pequeña que canaliza un determinado sonido. Cada objeto sonoro que reproduce en el juego usa una voz.

  • Prioridad: Valor que podemos establecer para un objeto sonoro o un conjunto de ellos y establece cuándo un sonido será eliminado para dejar espacio a otro nuevo. Los objetos sonoros de más alta prioridad serán eliminados los últimos.

Tutorial Wwise en Español - Parte VI: Mezcla

Note for my english readers: Sorry this article is not in your language but I wanted to write something for the spanish speaking community since there aren’t many resources on game audio in my native tongue. If I see that there is demand, I would be happy to translate this into english although most of the content can be found in Audiokinetic’s official resources.

Control y Equilibrio

A medida que un proyecto crece, más y más sonidos se añaden y puede ser difícil mantener un buen balance entre ellos. De poco sirve tener sonidos geniales si se pierden en el barullo de una batalla o suenan tan fuertes que resultan desagradables.

Veamos entonces algunas de las herramientas de las que disponemos para mantener siempre un buen control de todos nuestros elementos sonoros.

Schematic Layout

Como su nombre sugiere, esta opción nos muestra una vista esquemática de todos nuestros objetos sonoros y su relación con Actor-Mixers y buses. Esto es útil cuando queremos saber de un vistazo cómo se conectan los elementos de nuestro juego. En nuestro caso, tenemos un proyecto muy sencillo pero en un juego completo esta vista puede ser de gran ayuda. Puedes acceder a este layout simplemente en el menú principal "Layouts - Schematic” o usando F9.

Como puedes ver, las líneas continuas indican relaciones jerárquicas padre-hijo (para elementos contenidos en random containers o Actor-Mixers, por ejemplo), mientras que las líneas discontinuas muestran enrutamientos de audio, como cuando enviamos la salida de un objeto sonoro a un determinado bus. En el ejemplo, puedes ver que los distintos Actor-Mixers estan enrutados al bus “Environmental”.

Este layout no sólo nos muestra las relaciones entre todos estos elementos sino también podemos usarlo para hacer ajustes rápidos de mezcla. En principio, si seleccionas cualquier objeto sonoro, verás que puedes reproducirlo usando el transporte en la parte inferior o la barra espaciadora. Podemos entonces hacer aparecer muchos más parámetros para cada objeto y así ajustar nuestra mezcla desde esta misma vista.

Si miras en la esquina inferior derecha de esta Schematic View, verás una rueda dentada. Haz click y selecciona algunos de los elementos que ves en la imagen inferior.

Como puedes ver, ahora estos sencillos elementos se amplían, mostrándonos mucha más información. Puedes ajustar distintos parámetros de mezcla como el volumen, pitch y filtros. También puedes ver qué tipo de randomización hay y dónde, qué tipo de posicionamiento sonoro y si un determinado elemento está siendo afectado por un parámetro, switch o state.

Sessions

Vamos a ver algunas otras herramientas más concretas si cabe con las que contamos para controlar la mezcla de nuestro proyecto. De paso, esto también nos introduce un nuevo tipo de objeto en Wwise, las sesiones. Las puedes encontrar en la pestaña Sessions, dentro del project explorer del Layout Designer (ver captura).

Estas sessions nos permiten crear, recibir y enviar información de nuestro proyecto de distintas maneras, siendo las tres relacionadas con la mezcla. A grandes rasgos, para esto sirve cada tipo:

  • Soundcaster Session: Nos permite colocar objetos sonoros y sus GameSyncs asociados en un cómodo panel donde podemos hacer ajustes.

  • Mixing Sessions: Nos permite crear una mesa de mezclas virtual que nos mostrará faders, insertos, panorama de una forma muy parecida a un DAW.

  • Control Surface Session: Nos permite conectar una superficie de control física con nuestro proyecto para controlar parámetros con ella. No veremos esta sección en profundidad, pero es bueno que sepas que esto es una opción si tienes una superficie de mezcla.

Crear una nueva Soundcaster session

Empecemos por las soundcaster sessions, que como decía nos permite colocar los elementos que deseemos en un panel configurable. Para crear una nueva sesión, ve a la pestaña de sesiones y dentro de la “Default Work Unit” y crea una nueva Soundcaster session de la misma manera que puedes crear objetos sonoros. La puedes llamar como quieras, yo la he llamado SFX, por ejemplo.

Una vez creada, puedes acceder a ella haciendo click en View (en el menú principal de Wwise) y eligiendo Soundcaster sessions. También puedes usar el atajo Shift + S.

Nos aparece entonces una ventana que nos muestra todos los GameSyncs de nuestro proyecto, es decir, los Switches, RTPCs, Triggers y States. Si ves que no hay contenido en estos GameSyncs, pulsa en el botón que dice “Show All”. Por ahora, no vemos ningún objeto sonoro ni evento pero para añadirlos, sólo tienes que arrastrarlos al panel.

Como puedes ver en la imagen inferior, puedes arrastrar todo tipo de cosas, objetos sonoros como random containers, eventos, Actor-Mixers, etc… Una vez añadidos puedes hacer play en varios de ellos y así cómodamente recrear cómo se comportaría el sonido mientras se juega. Puedes, por ejemplo, disparar el ambiente y luego los pasos y ver cómo está el balance de ambos. Hacer ajustes rápidos en este panel es también muy cómodo.

Mira también que tienes todos tus switches y RTPCs muy a mano por lo que puedes ir cambiándolos para ver cómo estos afectan a los sonidos. Puedes simular por ejemplo andar por distintas superficies o cómo la salud del personaje se reduce.

Una última nota sobre las soundcaster sessions es que puedes crear varias diferentes lo que puede ser muy útil para probar los sonidos de, por ejemplo, un determinado nivel del juego o una determinada arma o mecánica de forma aislada y ordenada sin necesidad de andar buscando todos estos sonidos en tu jerarquía de objetos sonoros.

Mixing Sessions

Este tipo de sesión nos permite construir una mesa de mezclas configurable con la que podremos tener más control “táctil” de todos nuestros sonidos. De nuevo, podemos también crea varias de estas sesiones para trabajar con distintos conjuntos de elementos cada vez.

En este caso, tenemos un Layout que nos pemitirá ver estas mixing sessions. Haz click en Layout > Mixer o usa F8 en el teclado. Fíjate lo que se nos abre. Arriba, vemos una view llamado “Mixing Desk” que es la que contendrá nuestra mixing session. Abajo vemos algo con lo que ya estamos familiarizados, la soundcaster session que creamos antes. Esto tiene mucho sentido por que podemos usar el panel inferior para lanzar sonidos y el superior para hacer la mezcla en sí, obteniendo lo mejor de ambos mundos.

Para ello, vamos a crear una mixing session. Selecciona las flechas en la parte superior izquierda (ver imagen) y haz click en “New…”. Puedes llamarla SFX también pero ten en cuenta que para proyectos más grandes deberemos usar nombres más específicos para cada una de nuestras sesiones si queremos evitar confusión.

Nos aparece una mixing session que por ahora no tiene elementos pero para poblarla solo tenemos que hacer lo mismo que con la Soundcaster Session y arrastrar distintos objetos sonoros, Actor-Mixers y Buses al Mixing Desk. Verás que, en este caso, no puedes arastrar Eventos, ya que estos sólo son disparadores de los propios objetos sonoros, ergo por ellos no fluye audio realmente. Una vez añadidos unos cuantos elementos, puedes usar la barra lateral para bajar la vista de mezcla y ver todos los elementos disponibles, ya que no suelen caben en la view (esto depende de tu resolución de pantalla).

También puedes ocultar los elementos que no necesites, haciendo click en la rueda dentada que he marcado en amarillo en la imagen superior.

Como puedes ver esta vista recuerda mucho a una mesa de mezclas ya sea física o en un DAW. Disponemos de faders (parte inferior), control de panorama, envíos, insertos, etc… y todo al alcance de nuestra mano. También podemos randomizar parámetros en esta vista. Con esta disposición, estaríamos listos para hacer cualquier ajuste en la mezcla de nuestro entorno sonoro de una forma cómoda y muy visual.

Apuntes sobre Filosofía de Mezcla para Audio Interactivo

Ya os he dado las herramientas de las que dispondremos para nuestras mezclas pero otra cuestión es cómo usarlas. Es difícil responder a esta pregunta por que cada proyecto necesitará cosas diferentes. Aún así un buen comienzo sería pensar qué es importante en la mezcla y asegurarnos que la construimos teniendo en cuenta los elementos que queremos que siempre estén presentes y sean protagonistas.

Los jugadores van a actúar de formas impredecibles por lo que tenemos que asegurarnos que nos anticipamos en lo razonable a esto. Herramientas como ecualización, o compresión con sidechain pueden ser también muy útiles para dar prioridad a unos elementos respecto a otros. Imagina por ejemplo filtrar frecuencias en ciertos elementos para dar espacio a otros que se suelen dar a la vez o usar sidechain para bajar la música y el sonido ambiente ligeramente cuando hay diálogos presentes.

Tienes que empezar a pensar en la mezcla como una serie de reglas dinámicas y prioridades más que un mero conjunto de niveles como ocurriría en una obra lineal. Crear esta serie de dependencias es algo que debes desarrollar a medida que trabajas en diferentes proyectos y te das cuenta de que dispones de un espacio sonoro (y de procesamiento) limitado y debes hacer el mejor uso posible de él.

En la siguiente y última sección de este tutorial, veremos como las herramientas de optimización también nos pueden ayudar en este sentido y deben usarse en consonancia con las de mezcla.

Sumario

En esta sexta parte, hemos visto todo lo relacionado a mezcla. Si tienes dudas o cualquier problema, puedes escribirme a contactme [ arroba ] javierzumer.com. Mientras tanto, dejo por aquí un glosario con todos los conceptos que he ido introduciendo en esta parte. !Hasta la próxima!

  • Schematic Layout: Esta configuración de views nos permite ver nuestros elementos sonoros de una forma esquemática que nos muestra tanto sus relacions jerárquicas como de enrutamientos de audio.

  • Soundcaster Sessions: Tipo de objeto dentro de la pestaña Sessions que nos permite disponer en un panel los objetos sonoros que deseemos, inclutendo eventos, buses y Actor-Mixers.

  • Mixing Sessions: Sesión que nos permite agrupar objetos sonoros y buses en una vista muy similar a una mesa de mezclas.

  • Control Surface Sessions: Sesión que podemos crear para conectar una controladora de mesa física que tengamos con determinados parámetros dentro de Wwise y así poder controlarlos de forma táctil.

Tutorial Wwise en Español - Parte V: Flujo de señal y Efectos

Note for my english readers: Sorry this article is not in your language but I wanted to write something for the spanish speaking community since there aren’t many resources on game audio in my native tongue. If I see that there is demand, I would be happy to translate this into english although most of the content can be found in Audiokinetic’s official resources.

Controlando la señal sonora

En esta entrega vamos a ver cómo podemos asegurarnos de tener bien organizados nuestros objetos y hacer una buena gestión de cómo las distintas señales de audio fluyen por nuestro proyecto. Ten en cuenta que un juego finalizado contiene cientos de sonidos por lo que necesitamos tener control de todos ellos de una forma fácil y accesible.

Es importante recordar que, a diferencia de una mezcla lineal, aquí estamos trabajando con un medio interactivo en el que debemos preparnos para cualquier acción que pudiera ejecutar la persona que está jugando.

Actor-Mixers

La primera herramienta y la más esencial para controlar la señal sonora son los Actors-Mixers. Estos nos permiten agrupar un conjunto de sonidos a los que queremos aplicar los mismos cambios en sus parámetros como por ejemplo volumen o randomización en el pitch.

Un juego podría agrupar los objetos sonoros de la siguiente manera:

  • Entorno

  • Ambiente

  • Musica

  • Diálogo

  • Armas

  • Foley

En el caso de nuestro humilde proyecto de Cube, no tenemos muchos sonidos que agrupar, pero aún así puedes crear uno para cada categoría. Para ello, sólo tienes que seleccionar la Default Work Unit donde tienes todos los objetos y crearlos con click derecho y New Child >Actor Mixer. También puedes crear uno para nuestros objetos de ambiente (ambiente 1, ambiente 2 y pájaros). Te dejo una captura de cómo ha quedado el mío. Los Actor-Mixers pueden tener un color asignado que nos puede ayudar a indentificar mejor los distintos elementos de nuestro proyectos. Puedes aplicar colores haciendo click derecho en el Actor-Mixer y eligiendo “Set Color”.

Comportamiento y funcionabilidad de los Actor-Mixers

Verás que un Actor-Mixer tiene la misma ventana de Property Editor que cualquier tipo de objeto (imagen izquierda). Si en esta ventana aplicas un cambio de volumen de +1dB, por ejemplo, esto sería igual que ir a cada uno de los objetos contenidos dentro del actor y hacer este mismo cambio uno a uno. Si los objetos hijos tienen sus propios valores de volumen (digamos -3dB y +5 dB, por ejemplo), el Actor-Mixer aplicará su valor “encima” de este, de forma que nos quedaría -2dB y +6 dB. En otras palabras, los valores que des a un Actor-Mixer nos son impuestos a sus hijos, si no que se suman, como si de un VCA se tratase.

Quizás tengas la impresión de que entonces todos los elementos dentro de un Actor-Mixer están siendo mezclados juntos cómo si en un DAW enviaras la saida de un conjunto de pistas al mismo bus pero este no es el caso. Los Actors-Mixers no funcionan como buses sino como VCAs. De hecho, veremos pronto que Wwise sí que permite meclar sonidos pero para hacer esto utiliza un tipo de objetos llamados precisamente “Buses”, que veremos luego.

No quiero liarte. Básicamente piensa en los Actors-Mixers como VCAs o como grupos que te permiten cambiar (sumando valores, no imponiéndolos) cualquier parámetro de los objetos hijos.

Actor-Mixers en grandes proyectos

Puede merecer la pena que te pases de nuevo por el proyecto de Wwise de Limbo y mirar cómo está organizado, ya que este proyecto es muy grande y complejo. Mira cómo lo sonidos se organizan en los distintos objetos que hemos ido viendo en este tutorial (random, sequence, switch y blend containers) y estos a su vez se agrupan en Actor-Mixers y carpetas virtuales.

Piensa en qué casos necesitarías un Actor-Mixer y en qué otros te bastaría con una carpeta virtual, que es básicamente un mero contenedor sin ninguna funcionabilidad.


Master Mixer Hierarchy

Si estás en el layout designer y te fijas en la jerarquía de objetos verás que todos los objetos sonoros que hemos visto hasta ahora, incluídos los propios Actors-Mixers se sitúan en la llamada “Actor-Mixer Hierarchy”. Esta jerarquía engloba a todos los objetos que producen sonidos pero recuerda que no mezclan el audio de ninguna manera.

Pero esto tenemos la otra jerarquía que puedes ver encima, la “Master-Mixer Hierarchy”. Es aquí donde podemos ver los buses de los que hablamos antes y que realmente van a mover el flujo de audio de una manera similar a un DAW o una mesa de mezclas.

Si te fijas en tu proyecto, deberias ver uno llamado “Master Audio Bus”. Por defecto, todos tus sonidos acaban en este bus y es el que Wwise ha estado usando hasta ahora para mezclar el audio proveniente de todos los objetos. Si ves otros buses, los puedes ignorar por ahora.

Audio Buses

Fíjate en el property editor de cualquiera de tus sonidos o actor-mixers y verás que hay una sección que nos indica a qué bus va dicho objeto. Verás que también nos aparecen unos controles de volumen y filtro que nos permiten controlar cuánto queremos enviar a dicho bus.

Si seleccionas el bus en sí, verás que nos ofrece un control del volumen general del bus y un medidor grande por el que podremos ver el audio que fluye por el bus si reproducimos cualquiera de nuestros objetos.

Aquí llega lo complicado. Verás también que una sección llamada “Voice” donde encontramos unos controles llamados muy similares a los que veíamos en los Actor-Mixers, volumen, pitch y filtros. Estos controles, esencialmente funcionan como si de un Actor-Mixers se tratara, es decir, actúan sumándose a los valores de los objetos hijos de igual manera que si hubiéramos ido a cambiarlos uno a uno.

¿Por qué tanta redundancia? Bueno, por ofrecer más control sobre las fases de ganancia de la mezcla, para que puedas ajustar los niveles en el lugar donde tenga más sentido en cada caso de forma que tengas sufciente rango dinámico siempre que lo necesites. Tengo un artículo sobre el concepto de Gain Staging en general que te puede ayudar en este sentido.

Usando el Layout “Voice Profiler” para seguir el flujo de señal

Como ves la cosa se está complicando y ya hay varios lugares diferentes en los que podemos afectar distintos parámetros. Para aclararnos un poco, podemos utilizar el layout “Voice Profiler”. Selecciona este layout y si te aparece un aviso como el que ves en la imagen, simplemente haz click en la rueda dentada y en la ventana de “Profiler Settings” activa “Voice Inspector Data”.

Una vez hecho esto, comienza la captura haciendo click en el botón de “Start Capture” (cuadrado verde). No necesitamos iniciar el juego para esto. Selecciona entonces un objeto sonoro, como el teletransportador y reprodúcelo. Verás entonces que en la parte central aparece una visión gráfica de las distintas etapas de mezcla que están afectando a este objeto sonoro (cuadrado rojo), además de una visión esquemática (amarillo) que nos indica cada una de las fases que afectan al volumen y el resultado final.

Como puedes ver en mi captura, estoy cambiando los niveles en varias etapas y estas se suman para llegar al valor final. Cada vez que un sonido esté sospechasamente bajo o alto de volumen esta herramienta puede ayudarte a saber de dónde viene el problema. Recuerda que si no ves los valores en tiempo real es por que necesitas inciar una captura y, de nuevo, no es necesario que el juego esté abierto para que funcione.

Organizando nuestros Buses

Como ya he comentado, los buses sí que hacen una mezcla física (bueno, digital) de las señales sonoras. Puedes pensar en ellos como canales en un DAW o mesa de mezclas.

Los buses nos dan otra capa más de control de ganancia pero con la ventaja de que podemos trasladar sus señales directamente al motor de juego de forma independiente. Esto nos puede servir para dar control del balance de la mezcla a los propios jugadores. Posiblemente te hayas dado cuenta que en muchos juegos, como jugador, puedes controlar los niveles de la música, efectos y diálogos independientemente. En el casos de los juegos que usan Wwise, esto se puede conseguir usando diferentes buses.

Vamos entonces a crear algunos buses para diferenciar disintos elementos de nuestro juego. Vuelve al layout Designer y busca en la parte superios de la pestaña “Audio” la “Master-Mixer Hierarchy”. Verás un “Master Audio Bus” y quizás algún otro. Este “Master Audio Bus” es el responsable de que puedas oír el audio que sale de Wwise. Es básicamente una salida máster que se conecta con tu tarjeta de sonido. En el caso de cuando juegas a Cube, este bus es el que manda la señal de audio al juego.

Por ello, todos los buses que creemos deben ir a parar al master o, dicho de otra manera, deben ser hijos de él. Selecciona el “Master Audio Bus” y crea entonces dos nuevos buses y llámalos “Entorno” y “Música”. Verás que se crearán como hijos.

Una vez hecho esto, vamos a asignar nuestros objetos sonoros al bus correspondiente ya que por ahora, todos los objetos van directamente al Máster. La tarea es más fácil ahora que tenemos nuestros Actor-Mixers ya creados. Elige cada uno de ellos y verás que en el Property Editor podemos seleccionar el bus de salida. Haz click en el botón con los tres puntos y elige el bus llamado “Entorno”. Repite el proceso con todos los Actor-Mixers. Por ahora, no tenemos música en el juego pero ya sabemos que cuando la tengamos, tendremos el bus preparado.

Efectos mediante inserto

Una de las ventajas de trabajar con Wwise es que podemos aplicar distintos efectos a determinados sonidos o grupos de sonidos directamente, sin necesidad de tener que salir a otro programa.

La forma más sencilla e intuitiva de hacer esto es por inserto, es decir, aplicando el efecto a un sonido en su totalidad de la misma manera que se haría en un inserto en un DAW.

Por ejemplo, vamos a aplicar un flanger a nuestro sonido de teletransporte, para darle un toque extra. Vamos a nuestro objeto sonoro y si te fijas, el Property Editor tiene una pestaña llamada “Effects” que no hemos usado hasta ahora.

Una vez en esta pestaña, verás que nos aparece un panel donde podemos crear hasta cuatro insertos pero hay un problema. No podemos crear ninguno por ahora. Esto es por que, por defecto, este objeto sonoro está heredando las propiedades de su padre, es decir, el Actor-Mixer llamdo “Entorno” y este no tiene ningún inserto.

Quizás pienses que la solución sea crear los insertos en el Actor-Mixer y esto definitivamente funcionaría pero no sería lo ideal. Por ahora, sólo hay un sonido en este Actor-Mixer, pero en el futuro, seguro que vamos a querer poner otros sonidos como por ejemplo un sonido de puerta. El flanger sólo queremos que afecte al teletransportador por lo que aplicárselo a todo el Actor-Mixer no es muy buena solución.

En cambio, podemos seleccionar la opcíón “Override parent” que verás en la parte superior de la pestaña “Effects”. Esta opción básicamente le dice a Wwise que este objeto va a ignorar la configuración heredada de su padre y va a tener una propia. Verás que la misma opción aparece en otros lugares de Wwise y siempre implica lo mismo: ignora la configuración del elemento padre y sigue la tuya propia.

Hecho esto, podemos crear nuestro efecto. Haz click en el botón y busca “Wwise Flanger”. En la ventana emergente, selecciona “Default Working Unit”. Una vez insertado, reproduce el sonido y puedes cambiar de preset con los botones que aparecen (“Prev, y Next). También puedes hacer click en “Edit” para ajustar el sonido a tu gusto.

Efectos mediante auxiliar

Cuando queremos aplicar un efecto a un conjunto de sonidos, la forma más cómoda en Wwise sería usar un bus auxiliar. Estos funcionan de una manera muy similar a los auxiliares en un DAW. Tienen además la ventaja de que estos buses auxliares pueden ser activados y desactivados desde el propio juego, a medida que se necesiten, de forma que el sonido original siempre queda inalterado.

Una de las aplicaciones más obvias de esto sería una reverb. No sería nada práctico aplicar reverb a nuestros sonidos mediante inserto, ya que entonces estaríamos alterando el sonido desde la raíz y no sería fácil ir cambiando de reverb a medida que la jugadora cambie de espacio. Los auxiliares son una mejor solución, ya que no sólo nos permiten ir cambiando de espacio, sino también hacerlo de forma gradual.

Vamos entonces a crear un bus auxiliar y una reverb en nuestro juego. En este caso, queremos una reverb para los pasillos del mapa. Si vas a la “Master-Mixer Hierarchy”, verás que además de crear buses, también tienes la opción de “Auxiliary Buses”. Crea uno que sea hijo de nuestro bus “Entorno”. Esto tiene sentido por que sólo queremos que los sonidos del entorno como pasos, armas o el teletransporte se vean afectados. Cosas como la música o una voz en off no deberían tener esta reverb por lo que tiene sentido crear este auxiliar como hijo de nuestro bus “Entorno”. Vamos a nombrar al auxiliar “env_corridor”.

Que el nombre esté en inglés ya te puede dar una pista de que este nombre no lo podemos cambiar. Esto es por que el mismo motor del juego sabe en qué zonas del mapa se debería usar una reverb de pasillo y cuando el jugador entre en una de ellas, va a llamar a un auxiliar con un nombre establecido en el código del juego.

Una vez creado el auxiliar, ve a sus insertos y crea una Wwise RoomVerb. Puedes usar un preset como Room_Medium por ahora u ajustarlo luego.

El sigiente paso en decidir a qué sonidos queremos aplicar el efecto. Vamos a ir primero al Actor-Mixer que hemos llamado “Jugador”. Verás que en el Property Editor, debajo del área dónde podemos elegir el bus de salida hay una zona para buses auxiliares. En el primero slot, selecciona nuestro auxiliar.

Si ahora seleccionas los pasos y los reproduces, verás que la reverb se está aplicando. Como puedes ver, también podemos controlar la cantidad de sonido que enviamos al auxiliar. Por defecto el valor es 0, que enviaría toda la señal en su nivel nativo.

Si te fijas, tenemos ahora un pequeño problema. El objeto “Salud” también está siendo afectado por la reverb, ya que estaba también en el mismo Actor-Mixer pero probablemente esto no es lo que queremos. Este sonido debería sonar siempre igual y la reverb del lugar en el que estemos no debería afectarle. ¿Se te ocurre como solucionar esto? La mejor manera sería usando la opción “Override Parent” y eliminando el envío al auxiliar para este sonido.

Ya tenemos un envío funcional pero, ¿Cómo sabe Wwise que el jugador está en una zona de reverb? Ahora mismo, tal y como lo tenemos todo configurado, estaríamos enviando nuestros sonidos a la reverb en todo momento sin ton ni son. Para poder controlar esto, una solución es relegar el control de los auxiliares al propio motor de juego. Elimina el envío haciendo click derecho y seleccionando “Set User Auxiliary Send 0” y “None”. Ahora, verás que en la parte superior podemos seleccionar “Use game-defined auxiliary sends”.

Fíjate que los nombres de todas estas opciones nos dicen perfectamente lo que están haciendo. User-Defined son envios que controlamos nosotros desde Wwise mientras que “Game-Defined” se controlan desde el código del propio juego.

En el caso de Cube, todo está configurado para que cuando la jugadora pise los pasillos, el auxiliar que hemos creado entre en juego y luego su volumen se desvanezca a medida que se aleje de ellos. Ya tenemos una reverb funcional en los pasos.

Ahora sólo nos queda repetir la operación y envíar todos los otros objetos sonoros que queramos a la reverb. Como puedes ver, los Actor-Mixers nos facilitan esta tarea. Recuerda que sólo queremos enviar los elementos que tiene sentido que se vean afectados como por ejemplo la escopeta mientras que el sonido ambiente probablemente no lo necesite.

Ya puedes re-construir el SoundBank y probar en el juego como queda. La reverb se aplica a las zonas que el juego considera pasillos. Si no las encuentras, nada más salir, a tu derecha tienes un ejemplo. Prueba a ajustar la reverb en Wwise para encontrar la que te guste.

Sumario

En esta quinta parte, hemos visto como podemos controlar el flujo de señal en Wwise además de los efectos. Si tienes dudas o cualquier problema, puedes escribirme a contactme [ arroba ] javierzumer.com. Mientras tanto, dejo por aquí un glosario con todos los conceptos que he ido introduciendo en esta parte. !Hasta la próxima!

  • Actor-Mixer: Objeto que vive en la jerarquia del mismo nombre y nos permite agrupar sonidos a los que queremos aplicar los mismos cambios parametrales. Estos cambios serán sumados a los parámetros que tengan los elementos hijos. Los Actor-Mixer no realizan ningún tipo de mezcla de sonido, sólo controlan parámetros.

  • Master-Mixer Hierarchy: Jerarquía que encontramos en la pestaña de “Audio” y dentro del layout “Designer” y nos permite crear diferentes buses.

  • Buses: Objetos por los que sí que fluye el audio y se mezclan los distintos elementos cuyas salidas dan a ellos. Serían el equivalente a un canal o pista en un DAW.

  • Master Audio Bus: Este es el bus en el que se mezclan todos los sonidos y efectos de Wwise y conecta directamene con nuestra tarjeta de sonido para poder escuchar.

  • Auxiliary Bus: Tipo de bus especial que nos permite enviar señal desde cualquier objeto sonoro para así aplicar un determinado efecto. Funcionan de forma similar a las pistas auxiliares de un DAW.

  • Auxilary Sends: Fundamentalmente, hay dos maneras de hacer un envío hacia un bus auxiliar:

    • User-Defined: Este es un envío manual (configurado en Wwise por nosotros) y que siempre estará activo todo el tiempo a no ser que cambiemos la cantidad de señal enviada mediante un RTPC o State.

    • Game-Defined: No podemos controlar la cantidad enviada desde Wwise sino que es el código del propio juego el que dicta cuánto envía y a qué auxiliar.

  • Voice profiler: Layout que nos permite ver visualmente todos las etapas por las que pasa un sonido hasta llegar a la salida master y así poder como cada uno le afecta en términos de volumen, pitch y filtros.

  • Efectos: De igual manera que en un DAW, puedes insertar efectos en cualquier objeto sonoro, Actor-Mixer o bus auxiliar.

  • Overrride Parent: Función que encontramos en muchos lugares en Wwise y nos permite ignorar la configuración del elemento padre para poder aplicar una diferente para un determinado elemento hijo.