Workflow d'implémentation de Spatial Audio de Wwise dans Scars Above

Contenu sonore pour les jeux vidéo / Audio spatialisée

De quoi parle cet article ?
Qu'est-ce que l'API Spatial Audio ?
Flux de travail avec l'API Spatial Audio
    Rooms et Portals
        Organisation des assets et nomenclature
            Nomenclature
            Organisation des objets Wwise
            Organisation des assets dans l'éditeur Unreal
        Planification
            Délimitation des zones
        Configuration initiale
            Configuration de Wwise
            Configuration d'Unreal
        Implémentation
            Phase 1 : partie Unreal
            Phase 2 : partie Wwise
            Phase 3 : partie Unreal
        Test / Débogage
            Wwise RoomVerb
            Rooms et Portals
    Ak Geometry
        Qu'est-ce que l'API Ak Geometry ?
        Diffraction et perte de transmission
        Quand utiliser l'API Ak Geometry ?
        Implémentation
        Test / Débogage
            Partie Unreal
            Partie Wwise
    Optimisation
        Optimiser l'AkGeometry en l'associant à une Room
        Désactiver la diffraction sur les volumes entièrement convexes
        Désactiver les surfaces au sol
        Supprimer les Portals obsolètes
        Simplifier la géométrie
        Paramètres de Spatial Audio par plateforme
        Problèmes liés à la World Composition
    Nos solutions personnalisées
        Listener personnalisé
        VisualizeAkGeometry
        SplineAudioWalls
        Alterner les résonances des coups de feu
Conclusion

De quoi parle cet article ?

Dans cet article, j'essaierai d'approfondir les subtilités de Spatial Audio ainsi que la façon dont il a été utilisé dans Scars Above, notre jeu d'action-aventure à la troisième personne qui sortira bientôt. Dans Scars Above, les phases de gameplay amènent le joueur à traverser beaucoup de zones et de lieux différents, chacun ayant ses caractéristiques physiques et acoustiques qui, idéalement, devraient influencer le paysage sonore de manière à renforcer la perception d'immersion et de réalisme, sans jamais la briser. L'API Spatial Audio fournie par Audiokinetic avec l'intégration de Wwise, si elle est correctement implémentée, s'avère être parfaitement adaptée pour offrir une telle expérience au joueur. Je me concentrerai d'abord sur l'aspect technique de cette implémentation, en me destinant principalement aux concepteurs sonores, dans le but de proposer un guide clair et concis sur la manière dont nous avons tiré le meilleur parti de Spatial Audio dans le jeu ; puis, je proposerai des conseils concernant le débogage, l'optimisation et le travail que nous avons effectués chez Mad Head Games pour améliorer le flux de travail de l'implémentation de Spatial Audio.

Je n'entrerai pas dans les détails de la configuration du projet ni de ce qui se passe plus profondément dans l'outil de création Wwise et l'éditeur Unreal. Je pars du principe qu'un concepteur sonore chargé de l'implémentation de Spatial Audio dispose d'une connaissance intermédiaire de Wwise et d'Unreal Engine. Cela dit, tout ce qui manquerait dans ce document peut être trouvé dans la documentation en ligne, et je pense donc que même les débutants pourront y trouver des informations utiles.

Cet article a été rédigé par rapport à Scars Above, certains détails peuvent donc ne pas s'appliquer à d'autres projets. Scars Above est compilé en utilisant notre moteur de jeu personnalisé basé sur la version 4.27.2 d'Unreal Engine et sera publié avec la version 2021.1.9.7847.2311 de l'intégration Unreal de Wwise. Nous n'avons pas utilisé Wwise Reflect et nous avons packagé nos sons en utilisant l'ancien système de SoundBanks (et non le système d'Event-Based Packaging). Pour simplifier, et puisque c'était notre principale méthode de traitement de la réverbération, j'utiliserai le plug-in Wwise RoomVerb dans tous les exemples.

Qu'est-ce que l'API Spatial Audio ?

L'API Spatial Audio est une partie de l'API de Wwise qui regroupe un ensemble d'outils permettant d'émuler l'environnement acoustique d'un jeu. Avec ces outils, il est possible de recréer fidèlement plusieurs propriétés acoustiques du son telles que les réflexions, la propagation, la diffraction et autres phénomènes acoustiques, afin de simuler un environnement sonore réaliste venu s'ajouter à l'environnement physique d'un niveau de jeu. L'objectif de cette simulation est d'améliorer la sensation de réalisme du jeu, d'aider les joueurs à s'orienter dans l'espace et de leur fournir des informations importantes sur les actions qui se déroulent autour d'eux.

Le concepteur sonore chargé de l'implémentation de Spatial Audio doit parfaitement maîtriser son flux de travail. Idéalement, son travail sur Spatial Audio commencerait après la conception finale du niveau, une fois que tous les meshes, volumes et autres éléments géométriques sont en place, ce qui permet de jouer le niveau dans son ensemble. L'implémentation de Spatial Audio peut être réalisée en parallèle des autres phases de la réalisation du niveau, postérieures à sa conception structurelle ou « blockout » (comme l'habillage visuel), et ne devrait pas dépendre d'un autre département. Il est cependant important de noter que l'implémentation de Spatial Audio dépend fortement de toute modification apportée à la structure du niveau ; il est donc essentiel de suivre les changements effectués sur le niveau par nos collègues de l'équipe de Level Design, s'ils continuent à le faire évoluer.

Il est utile pour un concepteur sonore chargé de l'implémentation de Spatial Audio d'avoir des bases en modélisation 3D et/ou une expérience pratique de l'outil Brush Editing d'Unreal Engine, car nous utiliserons principalement cet outil pour façonner la géométrie utilisée par Spatial Audio.

Flux de travail avec l'API Spatial Audio

Il existe deux fonctionnalités distinctes de l'API Spatial Audio que l'on peut utiliser en parallèle pour atteindre le niveau de réalisme acoustique souhaité dans le jeu : les Rooms et Portals et l'API AkGeometry. Leur utilisation sera expliquée en détail dans les prochaines parties de cet article.

Rooms et Portals

Extrait de la documentation Wwise d'Audiokinetic :

« Le réseau de Rooms et de Portals peut être considéré comme une abstraction de haut niveau (ou comme une version à faible niveau de détail) de la géométrie environnante. Lorsqu'effectuée soigneusement, la combinaison des Rooms et des Portals avec la géométrie du niveau peut résulter en une simulation acoustique à la fois détaillée et efficace. »

Le rôle d'un concepteur sonore, lorsqu'il travaille avec des « Rooms » (pièces) et des « Portals » (portails), est de remplir manuellement le sous-niveau audio avec des Actors Rooms et Portals de façon à former un réseau cohérent de volumes qui couvrent, d'une certaine manière, tout « l'espace négatif » du niveau. J'utilise le terme « espace négatif » pour désigner toutes les zones vides à travers lesquelles un son peut être transmis ou reçu, comme les espaces extérieurs et intérieurs généralement remplis d'air, par opposition à l'espace tangible et solide, « positif », fait de matériaux, dans lequel aucun émetteur ou récepteur de son ne devrait exister.

Dans notre jeu, les Rooms sont représentées par la classe d'Actors AkSpatialAudioVolume. Ces Actors peuvent couvrir une ou plusieurs zones du niveau et leurs propriétés permettent de définir plusieurs caractéristiques, comme les réflexions se produisant sur leurs côtés et leurs bords, leur réverbération associée en ajoutant l'élément Wwise Aux approprié, l'assignation de Room Tones, etc. Les AkSpatialAudioVolume ont trois composants principaux : la « Late Reverb » (réverbération tardive), les « Room Reflectors » (réflecteurs de Rooms) et les « Surface Reflectors » (réflecteurs de surfaces), tous attachés au BrushComponent et chacun gérant une fonctionnalité distincte de Spatial Audio.

Les Portals, quant à eux, sont des Actors invisibles de volume de type AkAcousticPortal qui servent à couvrir toutes sortes d'ouvertures d'une Room, y compris celles qui relient deux Rooms entre elles. Ils possèdent un PortalComponent attaché au BrushComponent.

Tous ces volumes sont placés manuellement dans le niveau et couvrent « l'espace négatif » de manière que leurs limites ne se superposent pas d'une façon non souhaitée à des meshes ou à d'autres volumes.

Organisation des assets et nomenclature

Il y a cinq types d'objets et d'assets impliqués dans le flux de travail de Spatial Audio, dont deux du côté de Wwise et trois du côté de l'éditeur Unreal. Du côté de Wwise, on distingue les presets (préréglages) Wwise RoomVerb (dans la hiérarchie de ShareSets) et les bus auxiliaires (dans la Master-Mixer Hierarchy). Du côté de l'éditeur Unreal, on a les bus auxiliaires Audiokinetic (éléments .uassets), les AkSpatialAudioVolumes et les AkAcousticPortals (comme instances de classes d'Actors sur un niveau).

Assets Wwise :

  • Presets de réverbération Wwise (RoomVerb, Convolution Reverb) ;
  • Bus auxiliaires.

Assets Unreal Editor :

  • Bus auxiliaires ;
  • AkSpatialAudioVolumes ;
  • AkAcousticPortals.

Note : Comme mentionné au début du document, nous utiliserons uniquement le plug-in RoomVerb de Wwise pour simuler la réverbération, mais tout autre effet temporel peut être assigné à un bus.

Nomenclature

Nous avons décidé que tous les types d'assets de Spatial Audio devaient avoir le préfixe « AX » dans leurs noms. Les volumes AkSpatialAudio comportant uniquement une réverbération portent le suffixe « LR » ajouté après « AX », tandis que ceux utilisés aussi comme Rooms contiennent « Room » à la place de « LR ». Les presets Wwise RoomVerb et les assets Auxiliary Bus portent les mêmes noms descriptifs, définis selon le document de Spatial Audio relatif à la structure du niveau (voir section « Planification » ci-dessous). Les objets dans l'éditeur Unreal doivent avoir les mêmes noms que leurs équivalents Wwise.

Organisation des objets Wwise

Les presets de Wwise RoomVerb font partie de la hiérarchie de ShareSets, visible dans l'onglet « ShareSets » du Project Explorer situé dans l'outil de création Wwise. J'ai choisi d'organiser les presets dans un dossier séparé pour chaque niveau, comme ceci :

image (1)

Image 1 : Hiérarchie des ShareSets de Reverb

En principe, chaque zone d'un niveau doit avoir son propre preset, rangé dans un dossier dédié à ce niveau. Nous reviendrons plus tard sur la délimitation des zones de niveau.

L'autre type d'objets Wwise que nous utiliserons est le bus auxiliaire. Les bus auxiliaires font partie de la Master-Mixer Hierarchy, visible dans l'onglet « Audio » du Project Explorer, et sont organisés de la même manière que les ShareSets :

image (2)

Image 2 : Hiérarchie des bus auxiliaires de la Master-Mixer Hierarchy dans l'outil de création Wwise

Chaque bus auxiliaire doit être créé comme enfant d'un bus audio correspondant au niveau associé. Ces bus doivent avoir le même nom que leur ShareSet de preset correspondant, car chaque preset sera ensuite assigné à son bus auxiliaire.

  • Utilisation de bus auxiliaires génériques sur différentes zones

Dans Scars Above, nous avons appliqué une seconde approche pour organiser et utiliser les bus auxiliaires. En plus de créer un bus dédié pour chaque zone, comme expliqué ci-dessus, nous avons aussi créé deux groupes de bus auxiliaires génériques, pour les situations où il n'était pas nécessaire de créer un preset pour chaque zone. Nous avons divisé ces bus en deux catégories, extérieurs (« EXT ») et intérieurs (« INT »), avec des noms descriptifs.

image (3)

Image 3 :Hiérarchie des bus auxiliaires génériques

L'avantage de cette approche est de pouvoir assigner rapidement des bus à plusieurs zones similaires dans un niveau. En revanche, comme ces bus auxiliaires seront réutilisés, leurs presets ne pourront pas être modifiés individuellement s'ils ne conviennent plus. Dans Scars Above, nous avons trouvé un bon équilibre entre l'utilisation de presets dédiés pour les zones très variées et celle de presets génériques pour les zones plus simples et homogènes.

Organisation des assets dans l'éditeur Unreal

Comme mentionné, nous utiliserons trois types d'assets Unreal : les fichiers .uasset correspondant aux Audiokinetic Auxiliary Bus, les AkSpatialAudioVolumes et les AkAcousticPortals.

Nous allons créer les Audiokinetic Auxiliary Bus pour les bus auxiliaires en faisant un glisser-déposer depuis le WAAPI Picker vers le Content Browser.

AkSpatialAudioVolume et AkAcousticPortal sont des classes d'Actors issues de l'API de Rooms et Portals. Nous les placerons directement dans notre sous-niveau.

  • Dans le Content Browser

En ouvrant le WAAPI Picker et en accédant au dossier « AuxBus », nous devrions retrouver la même hiérarchie du Master-Mixer que celle configurée dans l'outil de création Wwise. Il suffit alors de faire glisser les assets Audiokinetic Auxiliary Bus depuis le WAAPI Picker vers le bon dossier, où seront placés les assets de Spatial Audio pour ce niveau. Si vous utilisez encore l'ancienne méthode de SoundBanks, il est nécessaire d'ouvrir chaque asset Audiokinetic Auxiliary Bus pour y assigner sa SoundBank appropriée.

image (4)

Image 4 : Hiérarchie des bus auxiliaires du Master-Mixer dans le WAAPI Picker


  • Dans le World Outliner

Toutes les instances de nos Actors de Spatial Audio dans le niveau (affichées dans le World Outliner) doivent être regroupées dans un dossier Spatial Audio à l'intérieur du dossier Audio, en les y déplaçant après les avoir placées dans le niveau. Je recommande d'avoir un dossier séparé pour les AkAcousticPortals.

image (5)

Image 5 : Instances d'Actors de Spatial Audio dans le World Outliner

Planification

Créer un réseau de volumes peut sembler difficile, surtout si le niveau est vaste, avec de nombreuses zones irrégulières et des chemins qui se croisent. Même si ces espaces peuvent renforcer l'intérêt visuel du jeu, ils compliquent beaucoup l'implémentation de Spatial Audio, et c'est pourquoi une bonne planification est essentielle.

Je suggère de diviser le niveau en segments, en distinguant les plus grands puis les plus petits, selon un processus que j'appelle « zonage ». À la fin de la phase de zonage, l'objectif est d'obtenir un document fini contenant la structure de Spatial Audio pour le niveau. Ce document doit contenir un plan du niveau avec des zones définies et les positions des Rooms et des Portals, ainsi que le nom des zones et leurs priorités. Pour élaborer correctement ce plan, nous devrons consulter toute la documentation existante relative à la conception du niveau. Il peut également être utile de discuter du concept du niveau lui-même, de son esthétique visuelle et de l'atmosphère qu'il doit véhiculer avec le concepteur de niveau ou le concepteur de jeu. Pour les niveaux plus complexes, une discussion avec le concepteur de niveau devrait permettre de savoir s'il y a des pièces/recoins/passages qui ne sont pas facilement visibles. Si l'équipe de Level Design a déjà réalisé sa propre version du zonage, il est souhaitable de réutiliser leurs noms de zones pour nos assets.

Délimitation des zones

Les zones représentent des parties du niveau qui sont suffisamment distinctes d'un point de vue acoustique et visuel pour être traitées comme des espaces séparés lorsqu'il s'agit d'organiser et de nommer les assets. Les zones peuvent être définies comme globales, spécifiques, ou comme Rooms, en fonction de la complexité du niveau, chaque type étant un sous-ensemble du précédent. Les zones peuvent ou non être représentées par un volume AkSpatialAudioVolume dédié, qui peut ou non être défini comme une Room. Selon le type de zone que représente l'AkSpatialAudioVolume, un numéro de priorité lui est attribué, les zones les plus globales ayant des numéros de priorité inférieurs à ceux des zones plus spécifiques.

image (6)

Image 6 : Exemple d'un niveau divisé en zones globales

Niveaux de priorité basés sur le type de zone :

  1. Zones (globales) - Niveau de priorité : 1 (ou plus)
  2. Zones (spécifiques) - Niveau de priorité : 2 (ou plus)
  3. Rooms - Niveau de priorité : 3 (ou plus)

Note : Les zones de même type peuvent avoir des priorités différentes dans les situations où il peut y avoir un chevauchement entre deux ou plusieurs zones. Dans ce cas, nous devons décider quelle zone a une priorité plus élevée que l'autre. Si les zones qui se chevauchent ont les mêmes priorités, le système ne sera pas en mesure de prédire la zone active.

Les zones spécifiques sont des parties des zones globales qui sont suffisamment distinctes pour justifier une instance d'AkSpatialAudioVolume dédiée à l'intérieur d'un AkSpatialAudioVolume appartenant à leur zone globale parente, et ayant une priorité plus élevée que cette dernière.

image (7)

Image 7 : Exemple d'une zone globale divisée en zones spécifiques

Les Rooms représentent les intérieurs et les espaces qui se trouvent à l'extérieur, mais qui sont en grande partie fermés et dont les ouvertures doivent généralement être couvertes par des Portals. Elles constituent un sous-ensemble des zones globales ou spécifiques et ont des priorités plus élevées que leur zone parent. Dans le document de structure du niveau, elles sont représentées par une capture d'écran de la pièce correspondante qui doit représenter sa taille et ses caractéristiques acoustiques, ainsi qu'afficher son nom et son numéro de priorité.

image (8)

Image 8 : Exemple de ce à quoi peut ressembler une Room

Configuration initiale

Avant de commencer l'implémentation des fonctionnalités de Spatial Audio dans notre jeu, il y a des choses à prendre en compte lorsqu'il s'agit de configurer les paramètres initiaux de notre projet et de nos objets Wwise et des classes Unreal Engine.

Configuration de Wwise

  • Activer la diffraction et la transmission

Pour qu'un objet sonore soit traité par l'obstruction et l'occlusion de Spatial Audio, il doit être inclus dans les calculs de diffraction, ce qui se fait en activant l'option « Diffraction and Transmission » dans l'onglet « Positioning » (paramètres de positionnement).

image (9)

Image 9 : Option « Diffraction and Transmission » dans l'onglet « Positioning »

Cette option doit être appliquée à tous les objets de l'Actor-Mixer Hierarchy ainsi qu'aux bus auxiliaires assignés aux volumes AkSpatialAudio en tant que bus 3D.

  • Activer les envois auxiliaires définis par le jeu

Pour qu'un son soit envoyé au bus auxiliaire d'une Room, c'est-à-dire à son effet Wwise RoomVerb, son envoi auxiliaire défini par le jeu (« Game-Defined Auxiliary Sends ») doit être activé. Ceci se fait dans l'onglet « General Settings » d'un objet audio que nous souhaitons envoyer vers le bus auxiliaire et qui fait partie de l'Actor-Mixer Hierarchy, ainsi que de tous les bus auxiliaires ayant des réverbérations que nous souhaitons envoyer à la réverbération d'une autre Room, en activant l'option « Use game-defined aux sends ».

image (10)

Image 10 : Activation de l'option « Use game-defined aux sends » d'un actor-mixer

Les objets n'ayant pas cette option activée ne seront pas traités par l'effet RoomVerb de Wwise assigné aux volumes du jeu.

  • Courbes globales d'Obstruction/Occlusion

Utiliser Spatial Audio dans notre jeu signifie que toutes sortes de calculs seront effectués au moment de l'exécution du jeu, décidant de la quantité de traitement appliquée à chaque Game Object envoyé au moteur de Spatial Audio. Deux paramètres principaux sont envoyés par le moteur du jeu à Wwise : La diffraction et la perte de transmission (« Transmission Loss »). La diffraction est liée à la quantité d'obstruction du son tandis que la perte de transmission est liée à la quantité d'occlusion du son.

La façon dont ces paramètres influencent le son est déterminée par les courbes de volume et de filtres LPF et HPF, définies autant pour l'obstruction que pour l'occlusion. Ces courbes peuvent être définies globalement ou par son en tant que RTPC.

Les courbes globales d'obstruction et d'occlusion peuvent être définies dans les paramètres du projet Wwise, sous l'onglet « Obstruction/Occlusion ».

image (11)

Image 11 : Courbes globales d'obstruction/occlusion définies dans les paramètres du projet

La configuration de ces courbes permet d'appliquer automatiquement le traitement à tous les sons subissant des calculs de diffraction et de transmission.

Note : je suggère d'utiliser des courbes d'occlusion globales plutôt que des RTPC de perte de transmission pour calculer l'occlusion. La raison en est que le calcul de la perte de transmission via les courbes RTPC ne sera pas effectué pour chaque chemin sonore distinctement, mais fournira une valeur unique par Game Object, ce qui signifie que le traitement effectué sur un chemin direct affectera également tous les chemins de diffraction potentiels provenant d'un émetteur. L'utilisation de courbes globales d'obstruction et d'occlusion permet de traiter le signal de chaque ray de manière indépendante et d'obtenir une plus grande précision lors de la modélisation de la transmission et de la diffraction.

Configuration d'Unreal

  • Taux de rafraîchissement de l'occlusion

L'alternative au traitement de l'obstruction et de l'occlusion de Spatial Audio est le calcul d'occlusion intégré à Unreal Engine, activé par défaut et pouvant être utilisé en parallèle de Spatial Audio. Comparée à l'implémentation de Spatial Audio et à son intégration dans le projet Wwise, l'occlusion du moteur Unreal est plutôt rudimentaire et si nous décidons de passer à la diffraction de Spatial Audio, il est préférable de désactiver l'occlusion du moteur Unreal.

L'occlusion d'Unreal Engine est appliquée à chaque instance d'AkComponent dans le jeu, sous la forme du paramètre « Occlusion Refresh Interval » (taux de rafraîchissement de l'occlusion) de l'Ak Component se trouvant dans la catégorie « Occlusion ». La valeur par défaut est de 0,2 seconde, ce qui signifie qu'à chaque cinquième de seconde, une nouvelle valeur d'occlusion est calculée pour cet AkComponent. La valeur 0 désactive complètement l'occlusion d'Unreal Engine.

image (12)

Image 12 : Réglage du paramètre « Occlusion Refresh Interval » de l'AkComponent sur zéro

Comme cette opération doit être effectuée sur chaque AkComponent du jeu, il est préférable de demander à un collègue de l'équipe de programmation de changer la valeur par défaut du paramètre à 0.0f dans le constructeur de l'AkComponent.cpp afin de ne plus avoir à s'en préoccuper à l'avenir.

  • Utilisation des presets de collision

Les presets de collision (« Collision Presets ») sont un moyen utile de s'assurer qu'une collision correcte sera appliquée à tous nos Actors de Spatial Audio. Le fait d'avoir des presets dédiés à Spatial Audio signifie que la collision sera toujours configurée correctement dès le départ et que les autres développeurs n'auront pas à se soucier de savoir si les modifications de leurs paramètres de collision affecteront nos volumes ou non.

Dans Scars Above, nous avons défini deux presets de collision, « SpatialAudioVolume » et « SpatialAudioVolumeBlock ». Puisque nos AkSpatialAudioVolumes n'ont pas besoin de bloquer quoi que ce soit et ont juste besoin d'enregistrer tous les Game Objects qui les chevauchent, tous les paramètres « Trace Type » (type de traçage) du preset de collision « SpatialAudioVolume » sont réglés sur « Ignore » (ignorer), à l'exception du paramètre « AudioTrace » (traçage audio) utilisé pour les résonances des coups de feu et pour le débogage, qui est réglé sur « Overlap » (superposition).

Dans le preset de collision « SpatialAudioVolumeBlock », comme son nom l'indique, le paramètre « AudioTrace » est réglé sur « Block » (bloquer) au lieu de « Overlap » (superposition), tandis que le reste est réglé sur « Ignore » (ignorer). Nous utiliserons ce preset sur tous les volumes et autres objets qui doivent être envoyés à AkGeometry, afin d'empêcher le listener d'entrer dans la géométrie. Ceci sera expliqué plus en détail à la fin du document, dans le cadre de l'intégration de notre « Custom Listener » (listener personnalisé).

image (13)

Image 13 : Presets de collision pour « SpatialAudioVolume » et « SpatialAudioVolumeBlock »

Je suggère fortement d'éviter d'utiliser des collisions personnalisées sur les Actors et en particulier leurs instances dans le niveau. Avoir des collisions personnalisées rendra beaucoup plus difficile de rester à jour sur les changements apportés plus tard durant le développement, et toute modification potentielle de nos presets de collision ne s'appliquera plus à ces Actors.

Implémentation

Phase 1 : partie Unreal

Le but de cette phase est de couvrir entièrement le niveau avec des AkSpatialAudioVolumes de manière à ce qu'ils créent une base pour le réseau de Rooms et de Portals. Le fait que ces volumes soient considérés comme des Rooms ou non dépend de la décision du concepteur sonore, qui s'appuie sur son document de structure du niveau. En général, un AkSpatialAudioVolume utilisé pour les extérieurs afin de simuler la réverbération tardive (Late Reverb) n'est pas considéré comme une Room et n'a pas besoin de suivre strictement les contours de la zone, tandis qu'un AkSpatialAudioVolume qui est une Room est plus souvent utilisé pour couvrir les intérieurs et doit suivre strictement la courbure de l'espace qu'il occupe.

image (14)

Image 14 : Réseau d'AkSpatialAudioVolumes uniquement composé de réverbérations tardives

image (15)

Image 15 : Réseau d'AkSpatialAudioVolumes ne comportant que des Rooms


  • Placement des Actors AkSpatialAudioVolume dans le niveau

Avant de commencer à remplir le niveau avec des instances d'Actors, nous devons nous assurer que nous sommes dans le sous-niveau approprié. Pour cela, nous devons ouvrir le menu déroulant « Window » et sélectionner l'onglet « Levels ». À l'intérieur de celui-ci, nous devons trouver notre sous-niveau audio (comportant le suffixe « Sound ») et double-cliquer dessus, après quoi son nom doit s'afficher dans le coin inférieur droit du Viewport, confirmant la sélection.

image (16)

Image 16 : Sous-niveau audio correctement sélectionné

Le placement d'un Actor AkSpatialAudioVolume se fait en choisissant ce type d'Actor dans la fenêtre « Place Actors » et en effectuant un glisser-déposer vers le niveau.

image (17)

Image 17 : Fenêtre « Place Actors » avec sélection d'un Actor AkSpatialAudioVolume

Lorsque nous ajoutons une instance de l'Actor dans le niveau, nous devons essayer de le placer de manière à ce que son point de pivot soit proche du centre de la zone. Le point de pivot est important car il définit l'emplacement de l'Actor, ses valeurs X, Y et Z, étant utilisées pour calculer la position du volume dans la vue Profiler et dans les outils de débogage comme la fonctionnalité « Visualize Rooms and Portals ». Le point de pivot est également important si nous voulons déclencher un Event depuis le volume lui-même en tant que Room Tone (nous reviendrons plus tard sur la fonctionnalité de Room Tone).

Après avoir placé l'Actor sur le niveau, son instance apparaîtra dans le World Outliner et sera sélectionnée, avec son onglet « Details » affiché. Dans cet onglet, nous pouvons choisir entre plusieurs paramètres :

  1. Cette instance aura-t-elle des surfaces distinctes (activées en cochant l'option « Enable Surface Reflectors ») ?
  2. Cette instance enverra-t-elle des données à un bus auxiliaire de réverbération tardive (activé en cochant l'option « Enable Late Reverb ») ?
  3. Cette instance se comportera-t-elle comme une Room (activé en cochant l'option « Enable Room ») ?

image (18)

Image 18 : Paramètres d'AkSpatialAudioVolume

L'option « Enable Surface Reflectors » est liée à l'utilisation des surfaces du volume comme géométrie, ainsi qu'à la définition de leurs propriétés acoustiques avec des textures acoustiques, etc. L'option « Late Reverb » (réverbération tardive) est liée à la décision de générer ou non les effets de la réverbération dans ce volume. Nous pouvons supposer que tous les AkSpatialAudioVolumes utilisés pour définir des espaces spécifiques tels qu'identifiés dans le document de structure du niveau doivent également simuler leurs propriétés acoustiques, il est donc logique d'activer cette option. L'option « Enable Room » est liée à la décision précédemment mentionnée de traiter ou non cette zone comme une Room.

En plus de ces paramètres situés dans l'onglet « Details », nous devons configurer le preset de collision du BrushComponent en cliquant sur le menu déroulant « Collision Presets » et en sélectionnant le preset « SpatialAudioVolume » que nous avons créé précédemment.

image (19)

Image 19 : Sélection du preset de collision AkSpatialAudioVolume approprié

Ensuite, nous devons définir le numéro de priorité des composants Late Reverb et Room définis selon notre document de structure du niveau.

image (20)

Image 20 : Définition appropriée des priorités de Late Reverb et de Room de l'AkSpatialAudioVolume

Nous devons maintenant ajouter un tag d'Actor au volume qui sera utilisé pour définir dans Wwise le State « Interior » (intérieur) ou « Exterior » (extérieur), utilisé par les résonances des coups de feu (plus d'informations à ce sujet dans la section « Nos solutions personnalisées »). En se basant sur les propriétés du volume (s'il est extérieur ou intérieur et sa taille), nous pouvons choisir entre quatre types de volumes différents :

  • Exterior;
  • Interior_Large;
  • Interior_Medium;
  • Interior_Small.

image (21)

Image 21 : Tag d'identification intérieur/extérieur ajouté à l'AkSpatialAudioVolume

La dernière étape consiste à renommer l'instance dans le World Outliner en suivant la nomenclature (« AX » pour le préfixe, suivi de « LR » ou « Room » selon le paramètre de Room, le reste du nom provenant du document de structure du niveau). Ensuite, nous devons déplacer l'instance dans le World Outliner vers le dossier Audio / SpatialAudio / <Level> (voir l'image 5).

  • Ajustement de la forme du volume à l'aide de l'outil Brush Editing

Au cours de cette phase, nous allons modifier le volume pour qu'il suive les contours de l'espace qu'il occupe. Si l'Actor n'est pas une Room, il suffit de tracer les lignes de la zone globale ou spécifique telle que définie dans le document de structure du niveau. S'il s'agit d'une Room, nous devons nous efforcer de modeler le volume de manière à ce qu'il suive de près les bords de la zone dans laquelle il se trouve, afin d'avoir un volume formant une bonne approximation de la zone qu'il englobe entièrement.

Il est plus facile d'y parvenir en utilisant l'outil Brush Editing de l'éditeur Unreal. Malheureusement, l'étude de cette fonctionnalité dépasse le cadre de cet article. Comme je l'ai mentionné plus haut, un concepteur sonore dédié à l'implémentation de Spatial Audio devrait se familiariser avec cet outil. Il existe de nombreux tutoriels en ligne qui devraient vous aider à déplacer des sommets et à extruder des faces en un rien de temps. Inutile de dire que la pratique est la clé de la réussite et, bien qu'au début cette tâche puisse sembler difficile, cela en vaut certainement la peine.

Voici quelques conseils pour vous aider à progresser :

1. Le raccourci vers l'outil Brush Editing est Maj+4 sur UE version 4.x et Maj+7 sur UE version 5.x ;
2. Le bouton « Enable Edit Surfaces » (activer l'édition de surfaces) dans l'onglet « Details » d'un volume AkSpatialAudio permet de masquer tous les Actors à l'exception du volume sélectionné et permet d'entrer en mode Brush Editing. En cliquant sur « Disable Edit Surfaces » (désactiver l'édition de surfaces), l'outil se ferme et réaffiche tous les Actors précédemment masqués ;

image (22)

Image 22 : Boutons d'édition de surfaces d'un AkSpatialAudioVolume

3. Lors de la mise en forme d'un volume de Room, j'ai trouvé qu'il était plus facile de sélectionner le sommet (vertice) inférieur et le sommet supérieur d'une arête verticale et de les déplacer simultanément, car cela permet de créer moins de triangles en gardant les sommets coplanaires ;

BrushEditing1

GIF 1 : Déplacement simultané de deux sommets

4. La sélection de deux sommets peut être facilement effectuée dans la vue orthographique du haut ou du bas dans le Viewport ;

BrushEditing2

GIF 2 : Sélection des sommets verticaux dans la vue orthographique du haut

5. J'essaie d'abord de couvrir l'une des principales ouvertures de la Room, puis je continue à partir de là. Le fait d'avoir les bords fixés à l'ouverture signifie que je n'aurais pas à me soucier de savoir si le Portal est placé correctement, puisque je dispose d'une surface dédiée uniquement à couvrir cette ouverture ;

6. L'extrusion est le moyen le plus facile d'ajouter de nouvelles surfaces et nous fournira plus de points pour une mise en forme ultérieure, mais faites attention à la surface que vous voulez extruder et n'en faites pas trop ou cela pourrait rendre le volume trop complexe et difficile à modifier ;

7. Lorsque vous avez terminé, voyez si vous pouvez trouver des sommets qui pourraient être obsolètes. Ne les supprimez pas, mais trouvez le sommet le plus proche que vous souhaitez conserver et fusionnez-le avec le sommet redondant.

BrushEditing3

GIF 3 : Fusion de sommets obsolètes

Un asset correctement modelé et finalisé doit couvrir suffisamment la zone dans laquelle il se trouve, suivant ses bords de près sans jamais déborder sur les espaces adjacents et sans chevauchement avec d'autres Rooms. Les Rooms qui se chevauchent peuvent causer des problèmes dans les zones qui ne sont pas couvertes par un Portal. Un soin particulier doit être apporté à la couverture des zones où se trouvent des émetteurs ou des listeners, même si cela implique d'ajuster le volume pour qu'il ne s'adapte pas parfaitement aux murs qui l'entourent, sans quoi nous pourrions rencontrer des problèmes de restitution sonore tels que des baisses soudaines de volume ou un filtrage indésirable.

Les problèmes surviennent lorsqu'un émetteur ou un listener passe de l'autre côté de la Room ou dans une autre Room le chevauchant à travers des surfaces qui ne sont pas couvertes par un Portal. Les volumes étant invisibles, il est possible de ne pas voir qu'une surface est présente entre le listener et l'émetteur. Le fait que le listener et l'émetteur se trouvent dans des Rooms différentes, même s'ils sont dans leurs lignes de vue, nécessite le calcul de nouvelles trajectoires directes et diffractées autour des bords qui les séparent. S'il n'y a pas de Portal, ces trajets peuvent être trop obstrués ou trop longs pour que le son émis soit entendu par le listener.

L'équipe d'Audiokinetic est consciente du caractère fastidieux de ce genre de travail manuel et fait de son mieux pour nous fournir des outils permettant d'accélérer ce processus. Alors que l'option « Fit to Geometry » sur les AkSpatialAudioVolumes et AkAcousticPortals peut sembler être une chance inestimable lorsqu'on travaille avec des géométries simples comme des bâtiments avec des salles et des couloirs cubiques, elle ne fonctionne pas bien avec les zones plus irrégulières et alambiquées comme les grottes ayant des ouvertures, des recoins et des tunnels sinueux, qui sont proéminents dans notre jeu. Les volumes résultants nécessiteraient très certainement un travail manuel supplémentaire, il n'y a donc aucune raison de suggérer son utilisation pour notre jeu.

Volume2

GIF 4 : Exemple d'un AkSpatialAudioVolume bien placé


  • Placement des Actors AkAcousticPortal dans le niveau

Comme pour les AkSpatialAudioVolumes, le placement d'un Actor AkAcousticPortal se fait en choisissant ce type d'Actor depuis la fenêtre « Place Actors » et en le faisant glisser dans le niveau.

Après avoir créé une instance de l'Actor, celle-ci apparaîtra dans le World Outliner et sera sélectionnée, avec son onglet « Details » affiché. Nous devons y définir l'état initial du Portal comme étant ouvert (« Open ») ou fermé (« Closed »), ouvert étant la valeur par défaut, et sélectionner le preset de collision « SpatialAudioVolume » approprié.

L'étape suivante consiste à renommer l'instance dans le World Outliner en suivant la nomenclature (« AX_Portal » pour le préfixe, le reste du nom provenant du document de structure du niveau). Ensuite, nous devons déplacer l'instance dans le World Outliner vers le dossier Audio / SpatialAudio / <Level> / Portals (voir image 5).

Nous devons maintenant changer la position de l'Actor pour qu'elle corresponde à la position de l'ouverture que nous voulons voir représentée par ce Portal. Nous allons faire cela à l'aide des outils Translate, Rotate et Scale de manière à ce qu'il recouvre entièrement l'ouverture. L'axe Y du Portal doit être perpendiculaire à l'ouverture, c'est-à-dire qu'il doit suivre la transition d'un espace à l'autre. Il faut également faire attention à l'orientation de l'axe X, qui définit la face avant du Portal. L'Actor est affiché dans le Viewport sous la forme d'un ruban jaune pour nous aider à nous orienter.

image (23)

Image 23 : Exemple d'un AkAcousticPortal bien placé

En modifiant l'échelle de l'axe X, nous pouvons définir la largeur du Portal. Cette largeur représente la zone dans laquelle se produit la transition entre deux espaces acoustiques et peut être considérée comme l'équivalent spatial d'un fondu enchaîné. Plus le Portal est profond, plus la transition est progressive.

Les AkAcousticPortals ont un indicateur de couleur qui indique si vous avez placé l'Actor correctement ou non. Tous les Portals doivent être rattachés à au moins un volume. Ils doivent également avoir une Room avant distincte de la Room arrière. Si aucun volume n'est associé à un Portal ou si celui-ci n'est pas correctement placé entre des volumes, le Portal sera coloré en rouge.

Portal3

GIF 5 : Indicateur de placement d'un AkAcousticPortal

Note : Un AkAcousticPortal ne peut fonctionner correctement que s'il est placé de manière à couvrir exactement un bord par AkSpatialAudioVolume adjacent. S'il est mal placé, les sons peuvent être coupés si le listener se retrouve à l'endroit où la face du volume croise le Portal. Cela nécessite une attention particulière lors de la modélisation des AkSpatialAudioVolumes, puisque nous devons être en mesure de modifier le volume de manière à ce qu'une seule de ses faces couvre l'ensemble de l'ouverture.

Lorsque l'on façonne deux Rooms adjacentes pour créer un réseau, j'ai constaté qu'il est préférable que ces Rooms soient reliées à l'ouverture de manière à ce qu'il n'y ait aucun espace vide entre elles. Cela permet de s'assurer que la transition se fait à travers un Portal et non à travers les surfaces d'une Room qui ne sont pas couvertes par un Portal.

BrushEditing4

GIF 6 : Un réseau de Rooms adjacentes sans espace entre elles


Phase 2 : partie Wwise

Nous allons maintenant nous tourner vers l'outil de création Wwise où nous allons créer des bus auxiliaires pour chacun des volumes AkSpatialAudio et leurs ShareSets de presets dédiés pour le plug-in Wwise RoomVerb, ainsi que définir leurs paramètres.

  • Création des bus auxiliaires

Si nous avons bien suivi les étapes de la section « Organisation des objets Wwise », tous les bus auxiliaires devraient être correctement nommés et localisés à la bonne place dans la Master-Mixer Hierarchy (voir Image 2). Dans l'onglet « Positioning » de chaque bus auxiliaire, nous trouverons des paramètres concernant le positionnement, l'atténuation et la diffraction. Nous devons activer l'option « Listener Relative Routing » (routing relatif au listener) et régler le paramètre « 3D Spatialization » (spatialisation 3D) sur « Position + Orientation ».

Depuis la version 2019.2 de Wwise, il n'est plus nécessaire d'assigner une courbe d'atténuation aux bus auxiliaires. La distance est calculée depuis l'emplacement de l'émetteur jusqu'à l'emplacement du listener et cette distance est utilisée pour l'atténuation déjà appliquée à l'émetteur. L'application d'une courbe d'atténuation au bus auxiliaire traiterait davantage les réverbérations émanant des Portals ; ajoutez donc des presets d'atténuation si vous estimez que l'atténuation d'origine de l'émetteur n'applique pas un traitement suffisant.

Nous devons activer l'option « Enable Diffraction » si nous voulons que la diffraction et la perte de transmission affectent la réverbération du volume se propageant à travers les Portals.

image (24)

Image 24 : Onglet « Positioning » d'un bus auxiliaire correctement configuré

Pour chaque effet de réverbération que l'on souhaite voir traité par les effets RoomVerb des autres volumes, il est nécessaire de cocher la case « Use game-defined aux sends » dans l'onglet « General Settings » du bus auxiliaire.

image (25)

Image 25 : Activation de l'option « Use game-defined aux sends » sur un bus auxiliaire


  • Création et assignation des ShareSets de Wwise RoomVerb

Pour créer un preset Wwise RoomVerb selon une manière préalablement définie, il faut naviguer vers l'onglet « ShareSets ». Ses paramètres sont définis en fonction des propriétés acoustiques du volume et des préférences esthétiques du concepteur sonore (voir Image 1).

Dans l'onglet « Effects » du bus auxiliaire, nous devons assigner une instance du plug-in Wwise RoomVerb et sélectionner le ShareSet approprié.

image (26)

Image 26 : Preset Wwise RoomVerb correctement assigné


Phase 3 : partie Unreal

  • Création et assignation des bus auxiliaires

Dans cette phase, nous devons créer les assets du bus auxiliaire dans l'éditeur Unreal en effectuant un glisser-déposer sur le bus auxiliaire depuis le WAAPI Picker vers le dossier approprié du Content Browser et en l'ajoutant à une SoundBank (le cas échéant), après quoi nous pourrons assigner le bus auxiliaire à son volume AkSpatialAudioVolume.

Pour assigner un bus, nous devons sélectionner le volume et, dans son onglet « Details », trouver la catégorie « Late Reverb », puis ajouter le bus auxiliaire dans la propriété « Aux Bus », soit en faisant un glisser-déposer sur ce bus, soit en le recherchant à l'aide de son nom.

image (27)

Image 27 : Bus auxiliaire correctement assigné

  • Room Tones

J'ai déjà mentionné plus haut l'importance de placer correctement l'AkSpatialAudioVolume dans le niveau. L'emplacement et la rotation du volume seront utilisés au cas où nous déciderions de lire un AkEvent directement sur le volume lui-même, en utilisant une fonctionnalité appelée « Room Tone ». Puisque le Room Tone prend en compte l'emplacement et la rotation du volume, la face avant du volume sera considérée comme la face avant du son. Si nous sélectionnons « Position + Orientation » dans l'onglet « Positioning » du son, l'image stéréo du son tournera avec la Room lorsque nous nous y trouverons, ce qui donnera l'impression que le son est fixé dans l'espace, et l'effet sera donc plus réaliste.

La principale différence entre un AkAmbientSound ordinaire et un Room Tone est que la distance entre le Room Tone et le listener est toujours évaluée à zéro lorsque le listener se trouve à l'intérieur du volume. Lorsque le listener sort du volume, l'émetteur sera placé sur le Portal le plus proche et la distance sera calculée depuis le Portal jusqu'au listener.

Test / Débogage

Wwise RoomVerb

Puisque nous n'avons pas la possibilité d'entendre les changements de paramètres lorsque nous éditons un preset dans l'outil de création Wwise, le test de ces paramètres doit être fait pendant une session de jeu. Nous devons démarrer la session, la connecter au Wwise Profiler et changer les valeurs de l'effet tout en jouant le jeu. Il est plus facile d'exciter la réverbération et d'entendre les changements effectués si vous avez un son positionnel avec une transitoire distincte qui peut être déplacé entre les volumes et déclenché au besoin. Dans Scars Above, j'ai souvent utilisé le son de l'attaque de mêlée de Kate, car il s'agit d'un personnage jouable toujours disponible.

Rooms et Portals

Le débogage des Rooms et des Portals consiste principalement à identifier des parties du niveau qui ne seraient pas correctement couvertes par un AkSpatialAudioVolume. Sans utiliser d'outils personnalisés, cette recherche se fait manuellement en prenant le contrôle du listener (généralement attaché au bras de la caméra) et en le déplaçant le long des bords des zones où les faces de notre volume et les murs environnants devraient se rencontrer. Comme les volumes sont invisibles pendant la phase de jeu, nous devons nous fier à nos oreilles pour détecter tout problème sonore. Ces problèmes peuvent se manifester par des baisses de volume immédiates ou des changements soudains dans le traitement sonore, en raison des valeurs de diffraction et de perte de transmission qui augmentent lorsque nous sortons du volume par une surface et non par un Portal. Si nous repérons une zone problématique, nous devons interrompre la session de jeu et modifier le volume de manière à ce que la zone soit couverte correctement, puis effectuer un nouveau test.

Si vous voyez le bord d'un volume dans le Viewport lors de l'édition, il s'agit d'une bonne indication pour identifier une zone où un volume ne couvrirait pas suffisamment d'espace. Les bords sont représentés par des lignes jaunes. Si vous voyez ces lignes dépassant de la géométrie, il est possible que le listener puisse sortir du volume par les surfaces reliées par cette ligne et se retrouver dans une zone non couverte par un volume, ce qui causera très probablement des problèmes de son.

image (28)

Image 28 : Arête d'un AkSpatialAudioVolume dépassant de la géométrie environnante

Si votre équipe utilise d'autres moyens pour bloquer la caméra (et donc le listener), comme des bloqueurs invisibles, vous pouvez essayer d'aligner le volume en fonction de ces Actors, mais mon expérience m'a appris qu'essayer de faire correspondre le volume avec des Static Meshes visibles à la fois dans le jeu et dans l'éditeur est un moyen assez sûr de s'assurer que le listener ne peut pas passer à travers les murs du volume. Bien sûr, cela peut varier, alors, encore une fois, vous devriez faire des tests approfondis.

  • Visualiser les Rooms et les Portals

Un outil qui pourrait s'avérer utile et qui vient avec l'intégration Unreal de Wwise est la fonctionnalité « Visualize Rooms and Portals » (visualiser les Rooms et les Portals). Si elle est activée dans les paramètres du projet (menu « Project Settings »), cette option nous permet de voir les instances des Actors AkAcousticPortal et leurs connexions aux Rooms adjacentes pendant que nous traversons le niveau. Bien qu'elle ne puisse pas afficher les limites des AkSpatialAudioVolumes, l'information fournie par cet outil est toujours très bénéfique car elle nous permet de voir si nos Portals et les pivots de nos volume sont placés correctement.

image (29)

Image 29 : Option de visualisation des Rooms et des Portals activée pendant le jeu

L'option de visualisation des Rooms et des Portals fait partie des paramètres d'intégration de Wwise et le fait de l'activer apportera un changement au fichier DefaultGame.ini qui sera enregistré dans le dépôt ; de fait, assurez-vous de la désactiver avant de l'enregistrer, à moins que vous ne vouliez que toute l'équipe voie les Portals (dans ce cas, attendez-vous à être rapidement sollicité par le département QA).

Si votre équipe de programmation a un peu de temps libre, je vous recommande vivement de créer un outil de débogage personnalisé pour Spatial Audio. Pour cela, avec l'aide de nos programmeurs, j'ai conçu et implémenté une solution personnalisée pour la visualisation de Spatial Audio appelée « VisualizeAkGeometry », qui sera décrite avec nos autres outils personnalisés à la fin de cet article.

Ak Geometry

Qu'est-ce que l'API Ak Geometry ?

L'API Ak Geometry représente un ensemble d'outils Wwise nous permettant de simuler l'effet de la diffraction du son autour d'un obstacle solide, ainsi que de simuler les réflexions sur les surfaces de cet obstacle, en travaillant en conjonction avec l'API de Rooms et Portals.

Diffraction et perte de transmission

La diffraction est un phénomène dans lequel l'onde sonore, dans son trajet de l'émetteur au listener, rencontre un obstacle, est obstruée par celui-ci et contourne les bords de cet obstacle à un certain angle pour arriver au listener avec un volume plus faible et un spectre de fréquences limité. Si l'obstacle est fait d'un matériau qui ne permet pas au son de passer à travers, le chemin diffracté prend la priorité sur le chemin direct en tant que source principale du son, plaçant l'émetteur (virtuel) sur les bords de l'obstacle.

La perte de transmission (« Transmission Loss ») se produit lorsque l'obstacle entre l'émetteur et le listener est suffisamment grand pour que le son ne puisse pas contourner ses bords, ce qui fait que nous n'avons que le chemin direct traversant l'obstacle. En fonction des propriétés du matériau de l'obstacle, le son sera partiellement ou totalement occulté, ce qui se traduit également par un volume plus faible et un spectre de fréquences limité.

La diffraction et la perte de transmission, qui font partie de l'API Ak Geometry, servent à définir les paramètres d'occlusion et d'obstruction dans Wwise et remplacent complètement le système d'occlusion d'Unreal Engine. En utilisant ces paramètres, nous pouvons façonner les courbes de volume et de filtres HPF et LPF des objets Wwise, ce qui nous donne la possibilité de simuler avec précision le phénomène acoustique d'obstruction et d'occlusion.

Quand utiliser l'API Ak Geometry ?

Supposons que nous soyons dans l'une de nos nouvelles Rooms et qu'il y ait un pilier de pierre au milieu de cette Room, composé d'un Static Mesh, et que nous voulions que le son le contourne et rebondisse le long de sa surface. Nous pouvons ajouter un composant AkGeometry qui prendra la collision du mesh et la traduira en une géométrie lisible par Spatial Audio. Cette géométrie servira d'approximation de la géométrie du niveau représentée dans le moteur de Wwise et sera utilisée pour le calcul des chemins directs et diffractés, ainsi que pour le réglage des valeurs des paramètres de diffraction et de perte de transmission.

Une meilleure utilisation serait dans les zones où il n'y a pas de diffraction, comme les extérieurs couverts par des volumes qui ne sont utilisés que pour la simulation de la réverbération tardive. Dans ce cas, nous ajouterions manuellement le composant AkGeometry à tous les Static Meshes que nous voulons inclure dans les calculs de Spatial Audio. Dans les niveaux qui ne sont pas peuplés de meshes complexes, il s'agit d'une solution rapide et facile. Sur les meshes comportant un grand nombre de triangles, l'ajout d'un composant AkGeometry peut s'avérer trop coûteux. Dans ce cas, nous pouvons mettre à profit nos connaissances de l'outil Brush Editing et utiliser les AkSpatialAudioVolumes pour couvrir l'obstacle et créer une géométrie d'une complexité bien moindre.

En combinant Rooms et Portals, les composants Ak Geometry et les volumes, nous pouvons couvrir avec succès toutes les zones et tous les obstacles devant affecter nos sons en les obstruant ou en les occultant.

Implémentation

Nous pouvons implémenter l'Ak Geometry de deux manières principales : en ajoutant un composant AkGeometry à un Static Mesh existant ou en modelant un Actor AkSpatialAudioVolume pour couvrir un ou plusieurs Static Meshes (ou n'importe quel autre type d'obstacle).

Ajouter un composant AkGeometry à un Static Mesh

L'ajout d'un composant AkGeometry à un Static Mesh existant consiste en plusieurs étapes. Tout d'abord, nous devons sélectionner l'Actor désiré dans le Viewport (il sera mis en évidence dans le World Outliner) et, en cliquant sur le bouton « +Add Component », trouver le composant « AkGeometry ».

image (30)

Image 30 : Ajout d'un composant AkGeometry à un Static Mesh

Nous devons sélectionner le composant et, pour le paramètre « Mesh Type » dans la catégorie « Geometry », choisir « Simple Collision » et activer « Enable Diffraction » (si ce n'est pas déjà le cas).

image (31)

Image 31 : Onglet « Details » d'un composant AkGeometry

Dans certains cas, cette solution peut s'avérer trop coûteuse car nous avons peu de contrôle sur la complexité de la géométrie qui sera générée par le composant. Même si nous utilisons des collisions simples plutôt que complexes, elles peuvent s'avérer trop complexes ou même ne pas fonctionner correctement, cette solution est donc à utiliser avec précaution. Si un Static Mesh n'a pas de Simple Collision, nous devons en créer une ou contacter notre équipe d'Artistes Techniques pour obtenir de l'aide.

Utiliser les AkSpatialAudioVolumes comme AkGeometry

Dans le cas où nous ne voulons pas ajouter un composant AkGeometry à un mesh, généralement pour des raisons d'optimisation, nous pouvons utiliser un AkSpatialAudioVolume à la place. Pour cela, nous devons ajouter dans le niveau une instance d'Actor du volume, et le façonner de manière à ce qu'il couvre adéquatement le mesh. Dans l'onglet « Details » du volume, nous devons activer « Enable Surface Reflectors » et désactiver « Enable Late Reverb » et « Enable Room ». Nous devons également nous assurer que l'option « Enable Diffraction » est activée et lui attribuer le preset de collision « SpatialAudioVolumeBlock ».

image (32)

Image 32 : Volume AkSpatialAudio correctement placé et configuré autour d'un Static Mesh

Le preset de collision « SpatialAudioVolumeBlock » est utilisé spécifiquement dans ce but, car il permet au volume de bloquer le canal « AudioTrace » auquel notre Custom Listener est lié. Cela nous permet de créer des volumes AkGeometry plus simples en moins de temps sans craindre que le listener entre dans ses limites. Pour plus d'informations concernant notre Custom Listener, consultez la section « Nos solutions personnalisées » de cet article.

  • Activer la diffraction sur les Rooms existantes

Si nous souhaitons que nos Rooms existantes se comportent comme des objets autour desquels le son doit être diffracté, nous devons activer l'option « Enable diffraction » (activer la diffraction) dans la catégorie « Geometry Settings » (paramètres de géométrie) de l'onglet « Details ».

image (33)

Image 33 : Activation de la diffraction sur un AkSpatialAudioVolume

Il est important d'activer la diffraction sur les volumes qui ne sont pas complètement convexes, lorsque nous voulons avoir une diffraction autour des bords où le volume se replie vers l'intérieur.

image (34)

Image 34 : Un AkSpatialAudioVolume concave avec sélection des arêtes qui diffracteront le son si cette option est activée

image (35)

Image 35 : Chemin possible entre l'émetteur (e) et le listener (l)


Solutions personnalisées

Dans Scars Above, nous avions des zones extérieures avec beaucoup de murs, d'escaliers et autres objets de grande taille qui devaient diffracter le son. Il n'était pas pratique d'assigner des composants AkGeometry aux meshes car il y en avait trop, ni de modéliser des AkSpatialAudioVolumes autour d'eux avec l'outil Brush Editing, car cela était trop fastidieux et prenait trop de temps. Dans de tels cas, je suggérerais de parler à vos programmeurs pour créer une solution personnalisée permettant une création rapide et fiable d'AkGeometry. J'ai pris beaucoup de plaisir à concevoir et à itérer sur notre outil que nous avons appelé « SplineAudioWall », dont je parlerai dans la section « Nos solutions personnalisées » de cet article.

Test / Débogage

Comme pour les Rooms et les Portals, il est obligatoire de tester la géométrie que nous avons créée, afin de détecter tout problème de diffraction du son ou la présence d'émetteurs et de listeners se retrouvant dans la géométrie alors qu'ils ne devraient pas y être. Il y a plusieurs façons de tester la diffraction, à la fois dans l'éditeur Unreal et dans Wwise, toutes fournissant des informations précieuses pouvant nous aider à localiser la géométrie problématique, nous donnant l'opportunité de corriger les problèmes et d'ajuster les paramètres jusqu'à obtenir le résultat désiré.

Partie Unreal

  • Afficher la diffraction

Pour tester les chemins de diffraction d'un émetteur pendant une session de jeu, nous pouvons activer l'option « Draw Diffraction » (afficher la diffraction) dans l'onglet « Details » d'un AkComponent, sous la catégorie « Spatial Audio » / « Debug Draw ».

image (36)

Image 36 : Activation de l'option « Draw Diffraction » sur un AkComponent

Lors du test, si un son est joué durant la phase de jeu, des lignes vertes seront dessinées depuis l'émetteur contenant l'AkComponent autour des bords de l'obstacle faisant partie de l'AkGeometry. De petites sphères violettes s'afficheront alors aux points des bords où le son a été diffracté. Cela peut nous aider à déterminer si les limites de la géométrie sont correctement définies et si la géométrie couvre suffisamment l'obstacle ou non.

image (37)

Image 37 : Exemple de chemins de diffraction dessinés durant une phase de jeu

Même s'il s'agit d'une fonctionnalité réservée aux développeurs et que les lignes ne seront pas affichées dans la version finale, il est conseillé de désactiver l'option « Draw Diffraction » sur l'AkComponent avant de soumettre les modifications dans le logiciel de contrôle de versions.

  • Visualiser les Rooms et les Portals

L'outil « Visualize Rooms and Portals » (visualiser les Rooms et les Portals) peut aussi nous aider à tester les chemins de diffraction autour des bords de nos Actors AkAcousticPortal. Combiné avec l'option « Draw Diffraction » mentionnée ci-dessus, cet outil devrait afficher les chemins de diffraction dessinés depuis l'émetteur autour d'un Portal jusqu'au listener.

Partie Wwise

Les tests du côté de l'outil de création Wwise incluent l'utilisation de deux Profilers différents afin d'obtenir les informations nécessaires pour identifier les chemins direct et diffractés, ainsi que les paramètres de diffraction et de perte de transmission.

  • Game Object Profiler

Avec le Game Object Profiler, nous pouvons visualiser les positions du listener et de tous les émetteurs jouant actuellement des sons, la géométrie envoyée à Spatial Audio et leur impact mutuel sur la propagation et la diffraction du son. Nous devons démarrer la session de jeu et nous y connecter dans l'outil de création. Après avoir ouvert le Game Object Profiler (le raccourci est F12), tous les objets mentionnés ci-dessus devraient s'afficher sur un plan de référence. Je ne détaillerai pas l'utilisation du Game Object Profiler, mais il suffit de dire que c'est un outil très utile qui peut nous aider à évaluer visuellement notre implémentation de Spatial Audio, incluant la géométrie, les chemins et valeurs de diffraction et de perte de transmission, entre autres.

image (38)

Image 38 : Exemple de session de profiling dans le Game Object Profiler

  • Voice Profiler

Le Voice Profiler nous permet de suivre les changements des paramètres de diffraction et de perte de transmission de manière un peu plus détaillée. Pour chaque Game Object jouant actuellement un son, nous pouvons voir dans la fenêtre « Voice Inspector » le chemin complet du son ainsi que tous les traitements qui lui sont appliqués. Cela inclut les paramètres « Diffraction » et « Transmission Loss » affichés en tant qu'enfants du Game Object de référence jouant le son que nous voulons profiler.

image (39)

Image 39 : Paramètres « Diffraction » et « Transmission Loss » affichés dans la fenêtre « Voice Profiler »

Optimisation

L'utilisation de Spatial Audio peut s'avérer coûteuse. Selon le nombre d'objets inclus dans les calculs, la complexité de la géométrie et le niveau de fidélité que nous exigeons de Spatial Audio, les calculs effectués à chaque tick peuvent être trop lourds pour le thread audio. Comme toujours, les ressources sont limitées et un concepteur sonore prudent prendra des mesures pour optimiser l'implémentation de Spatial Audio et réduire la charge que l'équipe audio fait peser sur le processeur.

J'ai listé ici quelques exemples d'optimisation qui, je l'espère, seront utiles à tout concepteur sonore souhaitant obtenir le meilleur fonctionnement possible de Spatial Audio dans son jeu.

Optimiser l'AkGeometry en l'associant à une Room

Si un Actor avec un composant AkGeometry est entièrement couvert par une de nos Rooms, il est souhaitable d'associer ce composant à la Room, de sorte que la propagation du son autour de cet Actor ne soit calculée que si le listener se trouve dans la même Room que l'obstacle. Pour cela, il suffit de sélectionner le composant AkGeometry de l'Actor et d'assigner l'instance de Room appropriée dans la propriété « Associated Room » (Room associée) de la catégorie « Optimization ».

image (40)

Image 40 : Association d'une Room à un composant AkGeometry sur un Static Mesh

Note : pour que cela soit possible, la Room et l'Actor ayant le composant AkGeometry doivent être placés dans le même sous-niveau.

Il est important de mentionner que si une Room a été associée à une géométrie, cette Room ne prendra en compte aucune autre géométrie globale du niveau (géométrie qui n'est pas associée à une Room), il faut donc garder cela à l'esprit.

Désactiver la diffraction sur les volumes entièrement convexes

J'ai mentionné plus haut que nous devions activer l'option « Enable Diffraction » sur tous les AkSpatialAudioVolumes que nous voulons inclure en tant que géométrie. Comme tous les Portals diffractent le son autour de leurs bords par défaut, il est préférable de désactiver cette option sur toutes les Rooms qui sont entièrement convexes, c'est-à-dire les volumes qui n'ont pas de bords sur lesquels nous voulons que le son se diffracte.

Il est plus facile de reconnaître ces volumes en se posant la question suivante : tous les Portals d'une Room ont-ils une ligne de vue directe entre eux ? Si la réponse est oui, il est probablement sûr d'exclure ce volume des calculs géométriques.

Désactiver les surfaces au sol

Supposons que nous ayons un volume de Room que nous voulons inclure dans la géométrie de Spatial Audio. La plupart du temps, nos Rooms sont constituées de murs, d'un plafond et d'un sol. Dans ces espaces, nous avons rarement besoin de calculer la diffraction à partir du sol, c'est-à-dire des surfaces inférieures, et il est donc judicieux d'exclure ces surfaces des calculs d'AkGeometry. Cela réduit le nombre de triangles d'AkGeometry et élimine la nécessité de calculer les chemins de diffraction provenant d'en dessous du volume.

Pour cela, il faut passer en mode Brush Editing, sélectionner spécifiquement les surfaces du sol du volume et les désactiver en décochant la case située à côté de la propriété « Enable Surface » dans la catégorie « Geometry Surfaces ».

image (41)

Image 41 : Désactivation des surfaces au sol d'un volume de Room

Supprimer les Portals obsolètes

Après avoir peuplé nos niveaux de Rooms et de Portals et vérifié que tout fonctionne correctement, nous devons nous demander s'il est possible que le son ne soit jamais amené à traverser certains de nos Portals. Les concepteurs de niveaux peuvent avoir placé des ouvertures sur les murs ou les plafonds (ou même les sols) pour des raisons esthétiques ou pour laisser passer la lumière. Le fait d'avoir un Portal dédié pour chacune de ces ouvertures nous donne l'assurance que notre géométrie imitera fidèlement celle du jeu et que si des sons se trouvent de l'autre côté, ils devraient être entendus.

D'un autre côté, il peut arriver que certains Portals n'aient jamais de sons à propager. La suppression de ces Portals améliorerait grandement notre implémentation de Spatial Audio puisque pour chaque Portal, des chemins doivent être calculés par rapport aux émetteurs, au listener et à tous les autres Portals qui sont attachés à la Room.

Simplifier la géométrie

Cela peut paraître évident, mais une géométrie plus simple permet de réduire le nombre de calculs à effectuer et d'améliorer la fluidité du processeur. Lorsque vous envisagez de simplifier votre géométrie, prenez en considération tous les cas pratiques du jeu et le niveau de détail que vous souhaitez atteindre dans des situations spécifiques. Le volume que vous avez si méticuleusement façonné autour de ces piliers courbés peut vous donner un niveau de détail plus élevé, mais si ce type de fidélité ne peut pas être réellement perçu par le joueur, il n'est pas nécessaire de l'avoir dans le jeu et vous devriez vous demander si une forme plus simple ne pourrait pas vous donner le même résultat.

Dans ce cas, vous pouvez soit créer un nouveau volume, soit réduire le nombre de triangles du volume existant en choisissant simplement les sommets que vous souhaitez conserver et en fusionnant ceux qui semblent obsolètes.

Paramètres de Spatial Audio par plateforme

Si vous trouvez que le thread audio a encore de la difficulté à prendre en charge tout le travail de Spatial Audio qui lui est soumis, vous pourriez vouloir vérifier les paramètres d'initialisation de Spatial Audio de votre (vos) plateforme(s) pour voir si des améliorations peuvent être apportées du côté de l'intégration de Wwise. Ces paramètres font partie de la catégorie « Wwise Project Settings » (paramètres du projet Wwise) et il y a plusieurs paramètres qui peuvent réduire la charge sur le processeur en sacrifiant une partie de la fidélité. Je ne les détaillerai pas individuellement, la plupart d'entre eux devraient être suffisamment explicites et les autres expliqués par des infobulles ou dans la documentation.

Vous trouverez ci-dessous les paramètres que nous avons trouvés satisfaisants, respectivement pour les plateformes PS4 et PS5.

image (42)

Image 42 : Paramètres de Spatial Audio pour Scars Above pour la plateforme PS4

image (43)

Image 43 : Paramètres de Spatial Audio pour Scars Above pour la plateforme PS5

Problèmes liés à la World Composition

Dans le cas où notre niveau fait partie de la World Composition et est chargé en stream avec d'autres niveaux, je suggérerais que tous les Actors de Spatial Audio soient placés dans un sous-niveau persistant spécifiquement créé pour héberger ces Actors, par exemple SUB_Sound_SpatialAudio. La raison est que, dans la version 2021.1.9 de Wwise et la version 4.27.2 d'Unreal Engine, les Actors de Spatial Audio ne se chargent pas facilement en stream, ce qui signifie qu'il peut y avoir de légers problèmes de son et des coupures lors du chargement et du déchargement simultanés d'un grand nombre de Rooms, de Portals, et d'autres élément d'Ak Geometry au moment de l'exécution du jeu. Le fait de les avoir tous dans un sous-niveau persistant permet de contourner ce problème, tout en restant assez léger en termes d'assets (si la configuration est correcte, le fait d'avoir beaucoup de géométrie Spatial Audio chargée en même temps ne devrait pas poser de problème. Dans Scars Above, nous avons eu jusqu'à plus d'un millier d'Actors dans un niveau persistant et le jeu fonctionnait très bien).

Nos solutions personnalisées

Les outils fournis par Audiokinetic et inclus dans l'API Spatial Audio de Wwise couvrent la plupart des besoins lorsqu'il s'agit de construire et de tester l'espace acoustique d'un jeu. Cependant, puisque chaque projet est spécifique, j'ai senti le besoin d'améliorer notre pipeline de Spatial Audio en créant plusieurs solutions personnalisées avec l'aide de notre équipe de programmation. Ces solutions ont amélioré nos flux de travail à la fois en termes d'efficacité et de rapidité, et je vous recommande vivement à nouveau de considérer vous impliquer davantage avec les outils disponibles et les personnes qui vous entourent afin de disposer des possibilités que seules des solutions personnalisées peuvent offrir.

Listener personnalisé

Nous avons hérité de la fonctionnalité de listener de l'intégration Unreal de Wwise, mais nous l'avons élargie afin de la rendre plus flexible. Notre « Custom Listener » (listener personnalisé) est placé sur un bras extensible dédié, toujours lié à la caméra, mais qui peut être déplacé indépendamment d'elle. Sa position peut être réglée à n'importe quel endroit entre la caméra et le personnage du joueur (j'ai pensé que la position la plus naturelle pour notre jeu était de l'avoir à environ 2/3 de la distance avec le personnage). Pendant les cinématiques, lorsque la caméra s'éloigne, nous pouvons choisir de déplacer le listener ou de le placer à la même position que le personnage du joueur.

En ce qui concerne sa relation avec Spatial Audio, nous avons fait en sorte que le listener ne puisse jamais entrer dans une géométrie ayant le preset de collision « SpatialAudioVolumeBlock ». Puisque la caméra et le listener sont sur des bras séparés, tout élément Ak Geometry ne bloquant pas la caméra (comme nos volumes invisibles) bloquera le listener. Cela agit comme une sécurité intégrée, ce qui signifie que nous pouvons être sûrs que le listener ne sera pas occulté par la géométrie. Cela nous permet également de créer une géométrie moins complexe autour des obstacles.

  • Commande ShowDebug AudioListener

La commande « ShowDebug AudioListener », conçue spécifiquement pour le débogage, affiche la position actuelle de notre composant Custom Listener mise à jour durant l'exécution du jeu, sous la forme d'une sphère bleue. Cela peut nous aider à voir la position du listener sur son bras extensible. Elle peut également nous indiquer si le listener sort des limites d'un volume ou s'il est obstrué d'une manière ou d'une autre. Il affiche également les données de transformation actuellement appliquées au listener.

Listenernew2

GIF 7 : Débogage du listener avec la commande de console « ShowDebug AudioListener »

VisualizeAkGeometry

Visualiser les Rooms et les Portals est une bonne chose, mais ne serait-il pas encore mieux de visualiser l'ensemble de l'AkGeometry pendant la phase de jeu, et pas seulement les Portals et leurs connexions avec les volumes ?

C'est ce que nous avons essayé de faire avec notre outil de débogage appelé « VisualizeAkGeometry » (visualiser la géométrie d'AkGeometry). Lorsqu'il est activé, il nous permet de voir les volumes et leurs relations avec d'autres géométries du niveau, ce qui facilite grandement la recherche des points problématiques et le débogage du listener et des chemins de l'émetteur pendant que vous jouez.

Nous avons implémenté plusieurs vues différentes. En plus de pouvoir activer ou désactiver l'outil, nous pouvons choisir d'afficher la géométrie sous forme de mesh semi-transparent, d'image filaire (wireframe) ou les deux, et nous pouvons choisir entre deux profondeurs de vue différentes. La première profondeur affiche toute la géométrie Ak Geometry devant tous les autres Actors du niveau, montrant ainsi la forme complète des volumes, tandis que la seconde profondeur cache la géométrie derrière les autres géométries du niveau, nous donnant la possibilité de voir toutes les arêtes et faces saillantes que nous aurions pu manquer lors d'une session d'édition avec l'outil Brush Editing. Cette vue nous permet également de voir les faces des volumes au niveau des ouvertures où devraient se trouver des Portals, ce qui nous permet de repérer les endroits où le listener ou l'émetteur passerait d'une zone à l'autre.

VisualizeAkGeometry4

GIF 8 : Différents modes d'affichage de l'outil « VisualizeAkGeometry »

SplineAudioWalls

Afin de faciliter la création de la géométrie d'Ak Geometry autour des obstacles, nous avons implémenté une classe d'Actors qui nous donnerait la flexibilité et la rapidité d'ajouter et de déplacer les points d'un Actor de type spline, tout en nous permettant de générer et de modifier rapidement des meshes simples pour chacun de ces points.

Cela nous a permis de créer une géométrie d'Ak Geometry qui ne dépendrait pas de l'outil Brush Editing, qui s'est avéré assez fastidieux à utiliser, surtout quand il fallait dessiner les volumes autour d'une géométrie de niveau existante. L'approche d'un « SplineAudioWall » (spline de cloison audio) est beaucoup plus intuitive, et même si son but principal est de simuler des murs, elle peut englober toutes sortes de formes, ce qui offre un flux de travail préférable à l'outil Brush Editing pour l'Ak Geometry.

Lorsque nous plaçons l'Actor dans le niveau, nous obtenons une spline courte et une simple boîte violette qui serviront de base à notre géométrie. Nous pouvons ajouter librement de nouveaux points à la spline, et de nouvelles boîtes (meshes procéduraux) seront créées instantanément. Pour chaque point individuel, nous pouvons déplacer et faire pivoter le mesh procédural, ainsi que le mettre à l'échelle dans toutes les directions.

Lorsque nous avons terminé avec l'Actor, nous obtenons une forme complexe composée de plusieurs boîtes simples, selon le nombre de points de la spline. Ce mesh procédural sera ensuite converti en Static Mesh, qui aura à son tour un composant AkGeometry attaché, envoyant la géométrie au moteur Spatial Audio de Wwise. Le mesh converti a le preset de collision « SpatialAudioVolumeBlock » assigné par défaut, afin d'empêcher le listener d'entrer à l'intérieur de ses limites.

Une fonctionnalité intéressante que nous avons ajoutée à l'Actor est la possibilité de désactiver toutes les surfaces au sol à des fins d'optimisation. Comme il s'agit d'Actors généralement placés sur le sol du niveau, cette option est activée par défaut.

SplineAudioWall2

GIF 9 : Modification d'une instance d'un Actor « SplineAudioWall »

Ces Actors peuvent également être affichés à l'aide de l'outil de débogage « VisualizeAkGeometry ». Les Actors AkSpatialAudioVolumes sont colorés en bleu clair, tandis que les SplineAudioWalls sont colorés en violet (voir GIF 8).

Gardez à l'esprit que chaque nouveau point de spline ajoute des triangles à la géométrie envoyée à Spatial Audio, veillez donc à supprimer tous les points inutiles.

À l'avenir, cette solution pourrait être améliorée en ajoutant un paramètre de « Transmission Loss » et une « Acoustic Texture » (texture acoustique) par surface. Comme nous n'avons pas utilisé Wwise Reflect dans Scars Above, cela n'a pas été une priorité.

Alterner les résonances des coups de feu

Dans Scars Above, nous avons décidé d'utiliser le réseau existant de Rooms pour déterminer le type d'espace dans lequel se trouve le personnage du joueur en fonction de son type (intérieur/extérieur) et de sa taille.

Nous avons réussi à accomplir cela en créant un composant « Player Character » personnalisé qui sonde les volumes à intervalles réguliers à l'aide du canal « AudioTrace » et renvoie le tag d'Actor du volume ayant la priorité la plus élevée. En fonction du tag d'Actor renvoyé, nous définissons le State « Interior » ou « Exterior » approprié dans Wwise. Ces States sont utilisés à plusieurs fins, notamment pour changer la résonance des coups de feu. Nous avons décidé que quatre types de sons pour la résonance des coups de feu étaient suffisants : « Exterior » (extérieur), « Interior_Large » (intérieur de grande taille), « Interior_Medium » (intérieur de taille intermédiaire) et « Interior_Small » (intérieur de petite taille). Un tag d'Actor doit être ajoutée manuellement à chaque instance d'AkSpatialAudioVolume.

image (44)

Image 44 : Onglet « General Settings » du Switch Container « Tail » (résonance) de l'arme V.E.R.A.

Conclusion

Merci d'avoir lu cet article. J'espère que les conseils que j'ai donnés ici vous aideront à mieux gérer certaines de vos difficultés avec Spatial Audio. L'API Spatial Audio étant en constante amélioration par les équipes d'Audiokinetic, certains détails de cet article deviendront moins pertinents avec le temps, mais les principes généraux d'une bonne planification et organisation, d'une implémentation minutieuse et d'un débogage et d'une optimisation approfondis resteront largement applicables. J'ai l'intention de suivre de près le développement de Spatial Audio à l'avenir, et j'espère que ce document sera mis à jour avec de nouvelles découvertes et des conseils sur les bonnes pratiques à adopter.

Je tiens à exprimer ma plus grande admiration à Dimitrije, Selena, Teodora et Marko, mes collègues concepteurs sonores chez Mad Head Games, ainsi qu'à Nikola d'EA Dice pour son soutien et ses commentaires. Un grand merci à Nina, Stevan, Nemanja et Dušan de l'équipe de programmation de Mad Head Games. Un grand merci à Julie, Adrien, Guillaume, Nathan, Louis-Xavier, Thalie, Masha et Maximilien d'Audiokinetic pour tous leurs conseils et pour m'avoir donné l'occasion de publier mes réflexions sous la forme de cet article.

Milan Antić

Concepteur sonore principal/technique

Mad Head Games

Milan Antić

Concepteur sonore principal/technique

Mad Head Games

Milan Antić est concepteur sonore principal/technique au studio Mad Head Games, basé à Belgrade, en Serbie. Il possède une riche expérience dans la conception sonore et la création de systèmes audio pour les jeux occasionnels et les jeux à gros budget, en particulier les projets AA/AAA développés dans Unreal Engine à l'aide de Wwise.

LinkedIn

Commentaires

Laisser une réponse

Votre adresse électronique ne sera pas publiée.

Plus d'articles

Réintroduction de Wwise Audio Lab (WAL)

Wwise Audio Lab (WAL) est un environnement 3D open-source semblable à un jeu vidéo, développé avec...

15.7.2022 - Par Damian Kastbauer

La Musique de Spacefolk City

Introduction au jeu Spacefolk City est une version accessible, excentrique et absurde d'un jeu de...

12.11.2024 - Par Alex May

Concevoir des systèmes d'ambiance dans Wwise

Introduction Bonjour à tous ! Je m'appelle Lewis, et je suis concepteur sonore chez Soundcuts ainsi...

2.4.2025 - Par Lewis Thompson

Système personnalisé de projection de la position du Listener de Wwise pour une vue 2D inclinée

Introduction Ceci est le deuxième article d'une série de trois articles techniques de Jater (Ruohao)...

28.5.2025 - Par Ruohao (Jater) Xu

Music design d’Assassin’s Creed Shadows

Nous utiliserons des exemples détaillés de techniques d'intégration dans Audiokinetic Wwise et...

4.7.2025 - Par Jullian Hoff

SEASON: A letter to the future | Utiliser un magnétophone comme mécanique de jeu

Introduction SEASON : A letter to the future est un voyage atmosphérique empreint d'introspection,...

9.7.2025 - Par Vibe Avenue

Plus d'articles

Réintroduction de Wwise Audio Lab (WAL)

Wwise Audio Lab (WAL) est un environnement 3D open-source semblable à un jeu vidéo, développé avec...

La Musique de Spacefolk City

Introduction au jeu Spacefolk City est une version accessible, excentrique et absurde d'un jeu de...

Concevoir des systèmes d'ambiance dans Wwise

Introduction Bonjour à tous ! Je m'appelle Lewis, et je suis concepteur sonore chez Soundcuts ainsi...