Steam Audio API pour une meilleure immersion VR et Unreal Engine

Steam pro­pose gra­tu­ite­ment sa solu­tion de généra­tion de son Steam Audio SDK qui cal­cule l’occlu­sion et la réver­béra­tion du son sur les élé­ments de l’environnement. les sons vont ain­si inter­a­gir avec l’environnement avant d’arriver aux oreilles de la per­son­ne en immer­sion. Il ne sera donc pas néces­saire au développeur de créer une géométrie d’occlusion spé­ciale pour les sons.

Le sys­tème a été dévelop­pé à l’origine par Impul­son­ic qui a été racheté par Valve en Jan­vi­er.

Ces derniers avaient déjà présen­té cette démo au CES de 2016:

Introduction à Steam Audio API

Steam Audio applique une réver­béra­tion physique en sim­u­lant la façon dont le son rebon­dit sur les dif­férents objets de la scène, en fonc­tion de leurs pro­priétés acous­tiques (par exem­ple, un tapis ne reflète pas autant de son qu’un grand pan­neau de verre). Les sim­u­la­tions peu­vent s’exécuter en temps réel, la réver­béra­tion répond ain­si facile­ment aux mod­i­fi­ca­tions de con­cep­tion, si vous ajoutez des meubles dans une pièce, vous pou­vez enten­dre la dif­férence.

Si votre géométrie est assez sta­tique, vous pour­rez pré­par­er la réver­béra­tion pen­dant la con­cep­tion (sorte de bake).

Pour Uni­ty, le plu­g­in est déjà mis à dis­po­si­tion et il le sera bien­tôt pour Unre­al Engine. Après il reste le SDK en C pour que vous puissiez l’implémenter dans vos pro­pres pro­grammes.

Steam Audio sup­porte actuelle­ment Win­dows, Lin­ux, OSX et Android. La liste de périphériques VR et plates-formes sup­por­t­ant cette API est en crois­sance con­stante. C’est tout du moins ce qu’ils annon­cent sur leur site.

Ope­nAL est une API con­cur­rente qui est util­isée par de nom­breux moteurs de jeux. D’autres bib­lio­thèques sim­i­laires exis­tent comme Direct­Sound de Microsoft, EAX de Cre­ative Labs et A3D de Aure­al, mais Ope­nAL a pour voca­tion de fournir une API plus stan­dard quelles que soient les plates-formes2, à l’instar d’OpenGL. C’est d’ailleurs l’API util­isée par UE4, mais aus­si par ceux ceux de id Soft­ware par exem­ple.

Steam Audio sup­porte le son bin­au­r­al grâce à une implé­men­ta­tion de HRTF (Head-Relat­ed Trans­fer Func­tion).  C’est un élé­ment que ne sup­porte pas Ope­nAL par exem­ple, et donc, en con­séquence, que ne sup­porte pas non plus UE4, même si d’autres moteurs sont égale­ment util­isés en fonc­tion des plate­formes d’exportation (voir ci-après).

Quand on met un peu le nez dans le code de Steam Audio et dans la doc­u­men­ta­tion, on trou­ve des objets comme IPLSim­u­la­tion­Set­tings. Il est ain­si pos­si­ble de mod­i­fi­er le nom­bre de rayons pour la prop­a­ga­tion du son, mais aus­si le nom­bre de rebonds, et un tas d’autres paramètres… Il y a un objet “Bin­au­r­al Ren­der­er” pour le ren­du Bin­au­r­al. Et tout est bien découpé en fonc­tion d’une sim­u­la­tion temps-réel ou Baked — notion qui est absente d’un moteur audio comme Ope­nAL par exem­ple.

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

On a sou­vent du mal à com­pren­dre com­ment un son peut sem­bler tourn­er autour de nous alors qu’on ne dis­pose que d’un casque. C’est plus facile quand on a un sys­tème com­por­tant plusieurs haut-par­leurs.

Les tech­niques de spa­tial­i­sa­tion du son con­sis­tent à créer l’illusion que des sons provi­en­nent de divers­es direc­tions de l’espace et à organ­is­er ain­si des scènes sonores en trois dimen­sions.

À l’aide d’un sim­ple casque audio, il est pos­si­ble de tromper notre cerveau pour lui don­ner une spec­tac­u­laire impres­sion de 3D. Le principe, appelé son bin­au­r­al, repose sur trois paramètres sur lesquels s’appuie notre cerveau pour se posi­tion­ner dans l’espace:

  • La vari­a­tion du vol­ume qui nous per­met d’apprécier la dis­tance de l’émetteur du son

  • Le décalage tem­porel (oreille droite/gauche): ce décalage du son de quelques micro-sec­on­des nous per­met de déter­min­er si le son est plus à gauche ou plus à droite, et ce, en plus de la vari­a­tion du vol­ume due à la dis­tance.

  • Les vari­a­tions spec­trales: Notre oreille a une forme par­ti­c­ulière, avec un pavil­lon tout en volutes et en cir­con­vo­lu­tions. Ces reliefs mod­i­fient légère­ment les ondes sonores en fonc­tion de l’angle avec laque­lle elles atteignent l’oreille. Ces vari­a­tions per­me­t­tent à notre cerveau d’identifier si le son provient de devant, de der­rière, du haut ou du bas.

A «Blind Leg­end», le jeu vidéo pro­duit par France Cul­ture et le stu­dio de créa­tion de seri­ous games DoWiNo a été spé­ci­fique­ment enreg­istré en son bin­au­r­al. Ce jeu place l’expérience sonore au cœur de l’aventure vidéoludique : en l’absence d’écran, le joueur est con­traint de se guider au son. Pour enreg­istr­er les scènes que le joueur pour­ra décou­vrir en jouant à «A Blind Leg­end», Bap­tiste Gui­ton, accom­pa­g­né de Cécile Bracq, experte du son bin­au­r­al à Radio France, ont procédé à un enreg­istrement audio en bin­au­r­al. “C’est un micro, qui a la forme d’une tête, et qui capte la total­ité des sons dans un sys­tème d’enregistrement en 3 dimen­sions», pré­cise Bap­tiste Gui­ton. Les micros sont capa­bles de percevoir si le son vient de der­rière, de devant, ou encore latérale­ment… «On a vrai­ment un son enreg­istré à 360 degrés»

Nous n’en sommes pas à vous mon­tr­er com­ment réalis­er ce type de son, mais en com­bi­nant ces 3 paramètres, on arrive à simuler un son 3D sur un sys­tème à 2 sor­ties (droite/gauche) comme un casque audio. C’est effi­cace avec un casque, car cela per­met de bien sépar­er les 2 sons et de recréer cette illu­sion. Cela ne fonc­tionne pas très bien avec des Haut-par­leurs pour cette même rai­son. Dans le cadre d’un sys­tème 7.1 (haut-par­leurs arrières, sur le coté, etc.), la sim­u­la­tion est encore plus réussie.

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

Unre­al Engine a réus­si une sorte de com­pro­mis, de façon à spa­tialis­er les sons dans une large mesure, quelque soit l’équipement de sor­tie (cela dépend essen­tielle­ment de votre carte sonore et de la façon dont elle est con­nec­tée aux haut-par­leurs): que vous ayez un casque, juste 2 haut-par­leurs ou un sys­tème 7.1 (8 canaux, avec sur­round), il détecte et s’adapte à l’équipement.

Il ne s’agit pas de son bin­au­r­al, mais d’un sys­tème per­me­t­tant de gér­er effi­cace­ment la vari­a­tion de vol­ume (atténu­a­tion) et le décalage tem­porel pour le posi­tion­nement du son dans l’espace.

Il con­vient toute­fois de faire la dif­férence entre un son 1–2 canaux, que l’on spa­tialise en lui don­nant une posi­tion dans l’espace, et un son mul­ti-canaux (ex: 7.1) que l’on joue tel quel comme une musique de fond, mais en envoy­ant chaque canal vers la sor­tie appro­priée. De même, rien ne vous empêche d’enregistrer un son en bin­au­r­al et de le restituer sur plusieurs canaux avec Unre­al Engine.

Il vous faut toute­fois un matériel d’enregistrement par­ti­c­uli­er comme celui présen­té dans l’illustration suiv­ante :

Utilité de Steam Audio ?

Par défaut, UE4 ne sup­porte pas le son bin­au­r­al, tout du moins, pas encore. Et qu’en est-il de la réver­béra­tion et de l’occlusion ? De ce coté là, il y a une bonne implé­men­ta­tion au sein du moteur, avec de nom­breux objets per­me­t­tant de con­fig­ur­er le tout.

On peut inté­gr­er des sons 8 pistes de type 7.1 ou utilis­er n’importe quel autre son dans une scène 3D, en gérant son atténu­a­tion, la réver­béra­tion du milieu, etc. Il y a de nom­breux objets pour cela: «Sound Wave», «Sound Cue», «Sound Class» ou encore «Sound Mix».

Toute­fois, même si le ren­du sonore est assez bon, il ne me sem­ble pas que la struc­ture de la pièce est une grande influ­ence sur le son… Il y a bien réver­béra­tion, mais … c’est pas aus­si bon que ce que j’ai pu enten­dre coté tests de Steam Audio, pour­tant je maîtrise assez la con­fig­u­ra­tion de l’audio sous UE4 (et il y a beau­coup à savoir pour en arriv­er là déjà).

La sonori­sa­tion dans un jeu est vrai­ment un méti­er à part entière, et cela devrait être encore plus impor­tant pour les appli­ca­tions de VR. J’aimerais bien avoir le retour ou l’avis d’ingénieurs son sur cette nou­velle API.

Sous UE4, il reste Wise d’Audiokinetic et FMod qui pro­pose des fonc­tions com­plé­men­taires (notam­ment en terme de visu­al­i­sa­tion de la prop­a­ga­tion du son en temps-réel pen­dant le débo­gage). Mais il me sem­ble que rien n’arrive au niveau de cette nou­velle API Audio de Steam en terme de ren­du sonore (réver­béra­tion, occlu­sion, bin­au­r­al).

Voici quelques dia­pos passées à la GDC 2017 (fichi­er PDF):

Ce qu’il faut retenir, c’est que le boulot sur Robot Recall a per­mis d’établir la néces­sité de faire évoluer le moteur interne basé sur Xaudio2 (Direc­tX), NGS2, Core Audio, AudioUnits (iOS), Ope­nAL et OpenSL ES (Android) selon les plate­formes d’exportation et tech­nos util­isées. L’idée, c’est de dévelop­pée une API moins dépen­dante de la plate­forme, sup­por­t­ant de nou­velles fonc­tion­nal­ités (DSP, Syn­thèse, etc.) et qui assure une com­pat­i­bil­ité ascen­dante. D’où l’ajout d’une nou­velle couche, l’Audio Mix­er Mod­ule. C’est actuelle­ment disponible dans la ver­sion 4.15, mais sous forme expéri­men­tale et unique­ment sur PC. Pour tester, il faut lancer l’éditeur avec en ligne de com­mande “-audiomix­er”. Un nou­v­el algo de réver­béra­tion a été implé­men­té, plus sim­ple à paramétr­er. Toute la par­tie DSP est implé­men­tée dans un plu­g­in et tout est mod­i­fi­able en temps réel sous l’éditeur (comme pour Wwise). Des tuto­ri­aux sont en cours d’élaboration et seront bien­tôt disponibles.  Avec la syn­thèse en temps-réel, c’est la porte ouverte la généra­tion procé­du­rale de musique, mais aus­si à tout un tas d’adaptations durant le jeu. On par­le notam­ment d’Audio Shaders!

J’attends donc avec impa­tience l’implémentation de Steam Audio par Epic Games dans Unre­al Engine. A pri­ori, ils ont tra­vail­lé étroite­ment avec Valve sur ce plu­g­in. Quand elle sera cou­plée à tous les objets internes, cela va décoif­fer ! Et tous les jeux vont y gag­n­er, pas seule­ment la VR. En tous cas, coté son, ça va être “que du bon­heur” prochaine­ment !

Si vous souhaitez com­man­der le tome 4 dédié aux inter­faces graphiques et au son 3D, c’est par ici (la ver­sion numérique est là). Notez que tout pos­sesseur d’un tome des cahiers d’UE (numérique ou physique) aura la pos­si­bil­ité d’obtenir la mise à jour à 1€ de ces tomes dès leur sor­tie. L’implémentation de Steam Audio dans UE4 fera bien enten­du l’objet d’une mise à jour du tome 4 !

3 réflexions sur « Steam Audio API pour une meilleure immersion VR et Unreal Engine »

  1. Mer­ci Greg,
    Mais il me faudrait un out­il VST je pense… Je pour­rais le met­tre sur mon soft audio de mix. Je vais con­tin­uer à chercher.
    A+

  2. Salut Ger­ard. Non, ne t’inquiète pas, la plu­part des logi­ciels comme Blender, 3DSMax ou autre, intè­grent une ges­tion du son 3D. Tu peux gér­er la posi­tion (X,Y,Z), la dis­tance d’atténuation, un cone d’émission. Mais tu n’as pas for­cé­ment la ges­tion de la réver­béra­tion ou le son bin­au­r­al par exem­ple. Pour cela, en effet, il faut des out­ils externes et ça com­plique grande­ment les choses. A mon avis, pour un film, mieux vaut utilis­er les out­ils de base, et faire du post-process au final en rajoutant quelques effets bien voy­ants (réver­béra­tion, echo, enveloppes de vol­ume) quand tu le juges néces­saire. Tout cela est val­able, tant qu’il n’y a pas de temps réel bien sûr. Par con­tre, oui, dès que tu auras du temps-réel, il te fau­dra pass­er par un moteur de temps réel. Si tu utilis­es 3DSMax ou Maya, tu préfér­eras utilis­er Stingray, mais c’est vrai qu’UE4 et Uni­ty sont entrain de se dot­er d’outils pour la VR et l’Audio qui sont très intéres­sants. A toi de voir 😉

  3. Bon­jour Greg,
    j’aimerai “ani­mer” le son dans l’espace 3D d’un film d’animation en VR (donc que de l’image). Je cherche une appli sim­ple d’utilisation ou un plug-in VST. Aurais-tu un con­seil ? j’espère ne pas à avoir à pass­er le film dans la “moulinette” d’un moteur comme UE ou Uni­ty… Dans le futur j’aimerai faire des films VR avec un min­i­mum d’interactivité comme des mou­ve­ments de caméra selon un choix de type “regard sur une cible pen­dant X sec­onde” et hop ! Je me déplace vers la cible. Pens­es-tu que pour ce type d’interactivité, il fau­dra pass­er par UE ou Uni­ty ?
    Mer­ci

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.