menu
 

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

Programmation audio / Contenu sonore pour les jeux vidéo

Introduction

Ceci est le deuxième article d'une série de trois articles techniques de Jater (Ruohao) Xu, dans lesquels il partage le travail réalisé pour Reverse Collapse : Code Name Bakery. Vous pouvez lire le premier article ici, dans lequel il explore l'utilisation de Wwise pour contrôler les cinématiques du jeu. Restez à l'écoute pour la troisième partie, qui sera publiée dans les prochaines semaines !

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

Série d'articles techniques | Partie 2

Reverse Collapse se distingue par un style artistique particulier, et l'un des choix visuels le caractérisant repose sur des niveaux utilisant un plan 2D incliné. À première vue, le jeu propose une vue en 2D avec une caméra en plongée. Cependant, chaque niveau est, en réalité, méticuleusement conçu avec une légère inclinaison par rapport à l'orientation de la caméra.

L'implémentation de l'audio 3D dans une vue en plongée classique est relativement simple. Cependant, dans une vue 2D inclinée comme celle de Reverse Collapse, le système audio 3D par défaut peut ne pas produire des résultats précis. La première tentative d'implémentation a entraîné des problèmes d'atténuation, en particulier lors des déplacements de la caméra de gauche à droite ou de haut en bas.

Pour résoudre ce problème, un système personnalisé est nécessaire afin d'ajuster le système audio 3D par défaut et de garantir son bon fonctionnement avec la vue 2D inclinée.

img1

L'image ci-dessus illustre le problème que nous avons rencontré : du point de vue de la caméra, la carte est inclinée, ce qui entraîne des imprécisions dans l'atténuation audio par défaut.

La solution repose sur un système de projection simple créé à l'aide des Game Objects de Unity, de scripts et de RTPC dans Wwise, afin d'établir un système de coordonnées X, Y et Z spécialement conçu pour l'audio. En déplaçant le Listener audio de sa position par défaut, sur la caméra principale, vers une position recalculée après la rotation de la carte, nous pouvons régler ce problème. Cette approche s'intègre parfaitement au système d'atténuation audio par défaut de Wwise. De plus, nous pouvons utiliser ce système de coordonnées personnalisées pour des cas spécifiques nécessitant un ajustement manuel de l'atténuation à l'aide des RTPC de Wwise.

Pour cela, nous devons d'abord configurer l'emplacement projeté du Listener, représenté dans la vidéo ci-dessous par le cube mauve, en utilisant un Prefab. Ce Game Object doit pouvoir être attaché à n'importe quelle caméra, avec un décalage fixe par rapport à la caméra principale. Il est essentiel d'en faire un Prefab, car notre projet comporte plusieurs configurations de caméra. Ainsi, il est essentiel de pouvoir placer ou modifier le système de projection en tant qu'enfant du Game Object de n'importe quelle configuration de caméra, directement lors de l'exécution. Cependant, cette étape peut varier selon les projets.

Une fois le Prefab configuré au bon emplacement, l'étape suivante consiste à ajouter le script AkAudioListener.cs, inclus dans l'intégration Unity de Wwise, sur le Game Object parent du Prefab. Cette action permet de définir ce Game Object comme Listener audio du jeu. Ensuite, nous devons supprimer le Listener audio par défaut situé sur le Game Object MainCamera.

img2

L'image ci-dessus met en évidence la configuration du Prefab de notre Game Object dédié au Listener dans le système de projection sonore ; nous l'avons nommé SoundProjectSampler

La vidéo ci-dessus illustre le problème lié à la vue de la caméra et présente le système final fonctionnant dans le moteur de jeu.

Dans Wwise, nous devons configurer les RTPC pour transférer les données de coordonnées depuis Unity vers Wwise. Cela nous permet d'appliquer les modifications sonores que nous voulons. L'étendue spécifique de chaque RTPC dépend de la taille en unités de chaque niveau du jeu. Dans notre cas, nous avons défini une étendue allant de 0 à 100.

img3

Sur le Game Object de caméra, comme dans la solution précédente, nous devons attacher le script et inclure ces appels de RTPC dans la fonction LateUpdate(). Bien que cela puisse également fonctionner avec Update(), l'utilisation de LateUpdate() garantit que toutes les opérations de rendu soient terminées avant la mise à jour des coordonnées audio. Ce séquençage permet de maintenir la synchronisation entre l'audio et les éléments visuels.

AkSoundEngine.SetRTPCValue(CameraDistance_X, Normalization(soundProjectionSampler.transform.position.x, 0.0f, 100.0f));
AkSoundEngine.SetRTPCValue(CameraDistance_Y, Normalization(soundProjectionSampler.transform.position.y, 0.0f, 100.0f));
AkSoundEngine.SetRTPCValue(CameraDistance_Z, Normalization(soundProjectionSampler.transform.position.z, 0.0f, 100.0f));

Notez que dans la solution ci-dessus, vous trouverez une fonction d'aide appelée Normalisation() qui convertit toute valeur flottante donnée en fonction d'un intervalle minimum et maximum vers un intervalle final compris entre 0 et 1. Il est fortement recommandé de disposer d'une telle fonction pour aider à unifier l'étendue du RTPC avec lequel nous travaillons. Cette fonction peut être implémentée simplement en suivant la formule mathématique de normalisation suivante :

Valeur normalisée = (Valeur à normaliser - Limite inférieure) / (Limite supérieure - Limite inférieure)

De nombreux exemples d'implémentation de cette formule existent dans différents langages de programmation, notamment en C# et en C++ ; une simple recherche en ligne fournira une multitude de résultats à ce sujet, c'est pourquoi nous ne nous attarderons pas ici sur cette partie.

Une fois ce RTPC intégré, nous pouvons obtenir des résultats audio précis en utilisant le système d'atténuation par défaut de Wwise. De plus, nous bénéficions d'une grande flexibilité pour affiner chaque son en appliquant les RTPC de coordonnées X, Y et Z directement aux sources audio elles-mêmes. Cela permet aux concepteurs sonores de définir leur propre système d'atténuation ou de le compléter en plus du système d'atténuation par défaut.

img4

img5

img6

img7

L'exemple ci-dessus montre comment l'atténuation du son des champignons (« Burning Fungus ») est modifiée lorsqu'ils sont enflammés par des grenades dans le niveau 3009 du jeu. Au départ, le son du champignon est configuré comme un son 3D avec l'atténuation de Wwise, en utilisant ses paramètres d'atténuation par défaut. En parallèle, l'atténuation est également contrôlée par les coordonnées projetées que nous avons définies, ce qui permet de personnaliser et d'ajuster l'atténuation sonore en fonction d'unités précises reçue depuis le niveau du jeu.

En plus de fonctionner avec les profils d'atténuation existants, les RTPC de coordonnées X, Y et Z peuvent également générer de manière indépendante des effets d'atténuation sur les sons au niveau de leur Game Object. Les concepteurs sonores peuvent ajuster le son sur chaque axe de la carte, ce qui permet de faire des réglages précis pour garantir une acoustique fidèle que peuvent entraîner les angles spécifiques de certains niveaux, comme ceux présents dans Reverse Collapse.

Cette flexibilité permet aux concepteurs sonores de créer des expériences audio immersives qui s'accordent parfaitement avec les visuels du jeu et renforcent son atmosphère générale.

Avertissement : Les extraits de code utilisés dans cet article sont des versions génériques reconstituées et destinées uniquement à des fins d'illustration. La logique sous-jacente a été vérifiée pour fonctionner correctement, les appels et fonctions API spécifiques au projet ont été omis des exemples en raison de restrictions potentielles en matière de droits d'auteur.

Ruohao (Jater) Xu

Programmeur audio, Concepteur Sonore Technique

Ruohao (Jater) Xu

Programmeur audio, Concepteur Sonore Technique

Jater Xu est un programmeur audio expérimenté et un concepteur sonore technique spécialisé dans les solutions audio interactives avec intégration de Wwise dans Unreal et Unity à l'aide de C++, blueprint et C#. Son travail est à l'origine des paysages sonores immersifs de jeux reconnus tels que Homeworld 3, The Chant et Reverse Collapse.

Commentaires

Laisser une réponse

Votre adresse électronique ne sera pas publiée.

Plus d'articles

Synchroniser la musique et le gameplay dans BPM : Bullets Per Minute

Créer le FPS rythmique parfait BPM : Bullets Per Minute est un jeu d'action rythmique de type FPS...

13.4.2023 - Par Awe Interactive

Assassin's Creed Valhalla | Système de musique de type Sandbox

L'élaboration de la musique d'Assassin's Creed Valhalla a constitué un travail colossal. Il...

24.4.2024 - Par Alexandre Poirier

Les dessous du son de Headbangers: Rhythm Royale

Headbangers: Rhythm Royale est le premier jeu musical compétitif en ligne au monde. Vous y affrontez...

3.7.2024 - Par Charles Bardin

Licence Indé gratuite de Wwise | Le meilleur de l'audio au service des développeurs indépendants

Créer une expérience audio immersive correspondant à la vision de votre projet peut être une chose...

18.7.2024 - Par Audiokinetic

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

Utiliser Wwise pour contrôler des cinématiques temps réel avec le plugin Time Stretch de Wwise

Introduction Cet article est le premier d'une série de trois articles techniques de Jater (Ruohao)...

22.5.2025 - Par Ruohao (Jater) Xu

Plus d'articles

Synchroniser la musique et le gameplay dans BPM : Bullets Per Minute

Créer le FPS rythmique parfait BPM : Bullets Per Minute est un jeu d'action rythmique de type FPS...

Assassin's Creed Valhalla | Système de musique de type Sandbox

L'élaboration de la musique d'Assassin's Creed Valhalla a constitué un travail colossal. Il...

Les dessous du son de Headbangers: Rhythm Royale

Headbangers: Rhythm Royale est le premier jeu musical compétitif en ligne au monde. Vous y affrontez...