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.