Steam Audio API pour une meilleure immersion VR et Unreal Engine

par | 11 Mar 2017

Steam propose gratuitement sa solution de génération de son Steam Audio SDK qui calcule l’occlusion et la réverbération du son sur les éléments de l’environnement. les sons vont ainsi interagir avec l’environnement avant d’arriver aux oreilles de la personne en immersion. Il ne sera donc pas nécessaire au développeur de créer une géométrie d’occlusion spéciale pour les sons.

Le système a été développé à l’origine par Impulsonic qui a été racheté par Valve en Janvier.

Ces derniers avaient déjà présenté cette démo au CES de 2016:

Introduction à Steam Audio API

Steam Audio applique une réverbération physique en simulant la façon dont le son rebondit sur les différents objets de la scène, en fonction de leurs propriétés acoustiques (par exemple, un tapis ne reflète pas autant de son qu’un grand panneau de verre). Les simulations peuvent s’exécuter en temps réel, la réverbération répond ainsi facilement aux modifications de conception, si vous ajoutez des meubles dans une pièce, vous pouvez entendre la différence.

Si votre géométrie est assez statique, vous pourrez préparer la réverbération pendant la conception (sorte de bake).

Pour Unity, le plugin est déjà mis à disposition et il le sera bientôt pour Unreal Engine. Après il reste le SDK en C pour que vous puissiez l’implémenter dans vos propres programmes.

Steam Audio supporte actuellement Windows, Linux, OSX et Android. La liste de périphériques VR et plates-formes supportant cette API est en croissance constante. C’est tout du moins ce qu’ils annoncent sur leur site.

OpenAL est une API concurrente qui est utilisée par de nombreux moteurs de jeux. D’autres bibliothèques similaires existent comme DirectSound de Microsoft, EAX de Creative Labs et A3D de Aureal, mais OpenAL a pour vocation de fournir une API plus standard quelles que soient les plates-formes2, à l’instar d’OpenGL. C’est d’ailleurs l’API utilisée par UE4, mais aussi par ceux ceux de id Software par exemple.

Steam Audio supporte le son binaural grâce à une implémentation de HRTF (Head-Related Transfer Function).  C’est un élément que ne supporte pas OpenAL par exemple, et donc, en conséquence, que ne supporte pas non plus UE4, même si d’autres moteurs sont également utilisés en fonction des plateformes d’exportation (voir ci-après).

Quand on met un peu le nez dans le code de Steam Audio et dans la documentation, on trouve des objets comme IPLSimulationSettings. Il est ainsi possible de modifier le nombre de rayons pour la propagation du son, mais aussi le nombre de rebonds, et un tas d’autres paramètres… Il y a un objet « Binaural Renderer » pour le rendu Binaural. Et tout est bien découpé en fonction d’une simulation temps-réel ou Baked – notion qui est absente d’un moteur audio comme OpenAL par exemple.

Petit extrait des cahiers d’Unreal Engine Tome 4 (P74-75)

On a souvent du mal à comprendre comment un son peut sembler tourner autour de nous alors qu’on ne dispose que d’un casque. C’est plus facile quand on a un système comportant plusieurs haut-parleurs.

Les techniques de spatialisation du son consistent à créer l’illusion que des sons proviennent de diverses directions de l’espace et à organiser ainsi des scènes sonores en trois dimensions.

À l’aide d’un simple casque audio, il est possible de tromper notre cerveau pour lui donner une spectaculaire impression de 3D. Le principe, appelé son binaural, repose sur trois paramètres sur lesquels s’appuie notre cerveau pour se positionner dans l’espace:

  • La variation du volume qui nous permet d’apprécier la distance de l’émetteur du son

  • Le décalage temporel (oreille droite/gauche): ce décalage du son de quelques micro-secondes nous permet de déterminer si le son est plus à gauche ou plus à droite, et ce, en plus de la variation du volume due à la distance.

  • Les variations spectrales: Notre oreille a une forme particulière, avec un pavillon tout en volutes et en circonvolutions. Ces reliefs modifient légèrement les ondes sonores en fonction de l’angle avec laquelle elles atteignent l’oreille. Ces variations permettent à notre cerveau d’identifier si le son provient de devant, de derrière, du haut ou du bas.

A «Blind Legend», le jeu vidéo produit par France Culture et le studio de création de serious games DoWiNo a été spécifiquement enregistré en son binaural. Ce jeu place l’expérience sonore au cœur de l’aventure vidéoludique : en l’absence d’écran, le joueur est contraint de se guider au son. Pour enregistrer les scènes que le joueur pourra découvrir en jouant à «A Blind Legend», Baptiste Guiton, accompagné de Cécile Bracq, experte du son binaural à Radio France, ont procédé à un enregistrement audio en binaural. “C’est un micro, qui a la forme d’une tête, et qui capte la totalité des sons dans un système d’enregistrement en 3 dimensions», précise Baptiste Guiton. Les micros sont capables de percevoir si le son vient de derrière, de devant, ou encore latéralement… «On a vraiment un son enregistré à 360 degrés»

Nous n’en sommes pas à vous montrer comment réaliser ce type de son, mais en combinant ces 3 paramètres, on arrive à simuler un son 3D sur un système à 2 sorties (droite/gauche) comme un casque audio. C’est efficace avec un casque, car cela permet de bien séparer les 2 sons et de recréer cette illusion. Cela ne fonctionne pas très bien avec des Haut-parleurs pour cette même raison. Dans le cadre d’un système 7.1 (haut-parleurs arrières, sur le coté, etc.), la simulation est encore plus réussie.

Pour obtenir cela, il y a de beaux algorithmes et pas mal d’ingénierie – tout cela vous est servi sur un plateau.

Unreal Engine a réussi une sorte de compromis, de façon à spatialiser les sons dans une large mesure, quelque soit l’équipement de sortie (cela dépend essentiellement de votre carte sonore et de la façon dont elle est connectée aux haut-parleurs): que vous ayez un casque, juste 2 haut-parleurs ou un système 7.1 (8 canaux, avec surround), il détecte et s’adapte à l’équipement.

Il ne s’agit pas de son binaural, mais d’un système permettant de gérer efficacement la variation de volume (atténuation) et le décalage temporel pour le positionnement du son dans l’espace.

Il convient toutefois de faire la différence entre un son 1-2 canaux, que l’on spatialise en lui donnant une position dans l’espace, et un son multi-canaux (ex: 7.1) que l’on joue tel quel comme une musique de fond, mais en envoyant chaque canal vers la sortie appropriée. De même, rien ne vous empêche d’enregistrer un son en binaural et de le restituer sur plusieurs canaux avec Unreal Engine.

Il vous faut toutefois un matériel d’enregistrement particulier comme celui présenté dans l’illustration suivante :

Utilité de Steam Audio ?

Par défaut, UE4 ne supporte pas le son binaural, tout du moins, pas encore. Et qu’en est-il de la réverbération et de l’occlusion ? De ce coté là, il y a une bonne implémentation au sein du moteur, avec de nombreux objets permettant de configurer le tout.

On peut intégrer des sons 8 pistes de type 7.1 ou utiliser n’importe quel autre son dans une scène 3D, en gérant son atténuation, la réverbération du milieu, etc. Il y a de nombreux objets pour cela: «Sound Wave», «Sound Cue», «Sound Class» ou encore «Sound Mix».

Toutefois, même si le rendu sonore est assez bon, il ne me semble pas que la structure de la pièce est une grande influence sur le son… Il y a bien réverbération, mais … c’est pas aussi bon que ce que j’ai pu entendre coté tests de Steam Audio, pourtant je maîtrise assez la configuration de l’audio sous UE4 (et il y a beaucoup à savoir pour en arriver là déjà).

La sonorisation dans un jeu est vraiment un métier à part entière, et cela devrait être encore plus important pour les applications de VR. J’aimerais bien avoir le retour ou l’avis d’ingénieurs son sur cette nouvelle API.

Sous UE4, il reste Wise d’Audiokinetic et FMod qui propose des fonctions complémentaires (notamment en terme de visualisation de la propagation du son en temps-réel pendant le débogage). Mais il me semble que rien n’arrive au niveau de cette nouvelle API Audio de Steam en terme de rendu sonore (réverbération, occlusion, binaural).

Voici quelques diapos passées à la GDC 2017 (fichier PDF):

Ce qu’il faut retenir, c’est que le boulot sur Robot Recall a permis d’établir la nécessité de faire évoluer le moteur interne basé sur Xaudio2 (DirectX), NGS2, Core Audio, AudioUnits (iOS), OpenAL et OpenSL ES (Android) selon les plateformes d’exportation et technos utilisées. L’idée, c’est de développée une API moins dépendante de la plateforme, supportant de nouvelles fonctionnalités (DSP, Synthèse, etc.) et qui assure une compatibilité ascendante. D’où l’ajout d’une nouvelle couche, l’Audio Mixer Module. C’est actuellement disponible dans la version 4.15, mais sous forme expérimentale et uniquement sur PC. Pour tester, il faut lancer l’éditeur avec en ligne de commande « -audiomixer« . Un nouvel algo de réverbération a été implémenté, plus simple à paramétrer. Toute la partie DSP est implémentée dans un plugin et tout est modifiable en temps réel sous l’éditeur (comme pour Wwise). Des tutoriaux sont en cours d’élaboration et seront bientôt disponibles.  Avec la synthèse en temps-réel, c’est la porte ouverte la génération procédurale de musique, mais aussi à tout un tas d’adaptations durant le jeu. On parle notamment d’Audio Shaders!

J’attends donc avec impatience l’implémentation de Steam Audio par Epic Games dans Unreal Engine. A priori, ils ont travaillé étroitement avec Valve sur ce plugin. Quand elle sera couplée à tous les objets internes, cela va décoiffer ! Et tous les jeux vont y gagner, pas seulement la VR. En tous cas, coté son, ça va être « que du bonheur » prochainement !

Si vous souhaitez commander le tome 4 dédié aux interfaces graphiques et au son 3D, c’est par ici (la version numérique est là). Notez que tout possesseur d’un tome des cahiers d’UE (numérique ou physique) aura la possibilité d’obtenir la mise à jour à 1€ de ces tomes dès leur sortie. L’implémentation de Steam Audio dans UE4 fera bien entendu l’objet d’une mise à jour du tome 4 !

Découvrez nos derniers numéros !

3 Commentaires

  1. GerardB

    Bonjour Greg,
    j’aimerai « animer » le son dans l’espace 3D d’un film d’animation en VR (donc que de l’image). Je cherche une appli simple d’utilisation ou un plug-in VST. Aurais-tu un conseil ? j’espère ne pas à avoir à passer le film dans la « moulinette » d’un moteur comme UE ou Unity… Dans le futur j’aimerai faire des films VR avec un minimum d’interactivité comme des mouvements de caméra selon un choix de type « regard sur une cible pendant X seconde » et hop ! Je me déplace vers la cible. Penses-tu que pour ce type d’interactivité, il faudra passer par UE ou Unity ?
    Merci

    Réponse
    • greg

      Salut Gerard. Non, ne t’inquiète pas, la plupart des logiciels comme Blender, 3DSMax ou autre, intègrent une gestion du son 3D. Tu peux gérer la position (X,Y,Z), la distance d’atténuation, un cone d’émission. Mais tu n’as pas forcément la gestion de la réverbération ou le son binaural par exemple. Pour cela, en effet, il faut des outils externes et ça complique grandement les choses. A mon avis, pour un film, mieux vaut utiliser les outils de base, et faire du post-process au final en rajoutant quelques effets bien voyants (réverbération, echo, enveloppes de volume) quand tu le juges nécessaire. Tout cela est valable, tant qu’il n’y a pas de temps réel bien sûr. Par contre, oui, dès que tu auras du temps-réel, il te faudra passer par un moteur de temps réel. Si tu utilises 3DSMax ou Maya, tu préféreras utiliser Stingray, mais c’est vrai qu’UE4 et Unity sont entrain de se doter d’outils pour la VR et l’Audio qui sont très intéressants. A toi de voir 😉

      Réponse
  2. GerardB

    Merci Greg,
    Mais il me faudrait un outil VST je pense… Je pourrais le mettre sur mon soft audio de mix. Je vais continuer à chercher.
    A+

    Réponse

Laisser un commentaire

Ces articles pourraient aussi vous intéresser …