Headbangers: Rhythm Royale est le premier jeu musical compétitif en ligne au monde. Vous y affrontez 29 autres joueurs dans des batailles musicales ou rythmiques intenses. Les challenges liés à la réalisation de ce jeu ont été énormes. Dans cet article, je vais vous en expliquer quelques-uns et vous montrer comment nous avons réussi à contourner certaines limitations.
La synchronisation en ligne
La manière dont nous synchronisons nos 30 joueurs en ligne dans Headbangers est unique. Le jeu n’est pas basé sur les déplacements des personnages dans l’espace ou leurs actions, mais bien sur les réponses à des événements musicaux. Nous avons donc décidé de synchroniser client et serveur à la musique et à sa progression.
Le temps et les validation étant gérés par le serveur, nous pouvons donc détecter si un joueur est décalé ou nom du temps réseau. Au-dessus d’un décalage de 100 ms, le joueur sera re-synchronisé, ce qui signifie concrètement que la tête de lecture bougera dans la musique pour le caler au bon moment. Grâce à des optimisations réseau importantes, nous avons pu nous assurer de la rareté extrême de ces re-synchronisations.
Au moment de mettre tout cela en œuvre dans Wwise, nous avons fait face à un vrai challenge : Wwise n’est pas pensé pour la méthode que nous voulions appliquer. Rien ne permet de manière simple de bouger la tête de lecture d’une musique et de sons pour les faire avancer ou reculer selon les instructions d’un temps réseau.
Nous avons trouvé (globalement au hasard) une astuce : se servir du système de transition pour créer des règles particulières. Nous avons remarqué qu’en créant une transition immédiate et sans fade out d’un morceau vers lui-même dans l’onglet Transitions d’un Switch Container, nous pouvions maintenant bouger la tête de lecture comme nous le souhaitions.
Cette méthode a été sacrément lourde à appliquer à tout le jeu. Headbangers contient des milliers de segments musicaux (plus de 50 heures de musique), et il a fallu appliquer cette procédure pour chaque segment musical du jeu. Ce qui m’amène naturellement au point suivant.
Gestion des SoundBanks et optimisation
L’immense quantité de sons et de musiques contenus dans Wwise (plusieurs dizaines de milliers au total) en fait certainement un des jeux les plus volumineux en termes de contenu sonore de l’histoire du jeu vidéo. Le jeu sortant sur toutes les consoles et le PC, la gestion de la mémoire et des SoundBanks (surtout pour la Switch) a été un véritable défi.
Mon conseil, c’est d’anticiper ces questions le plus possible en amont. De mon côté, j’ai dû faire face à ce souci tard dans le développement, ce qui m’a contraint à retravailler totalement mon architecture.
Il y a 23 minijeux dans Headbangers. Nous avons donc finalement fait le choix de diviser le jeu en 24 SoundBanks : une SoundBank par minijeu et une SoundBank générale, contenant des sons communs à tous les minijeux ainsi que les sons et musiques des menus. La décision de répartition des sons entre ces SoundBanks est un élément clé dans la gestion de la mémoire. Il a donc fallu réfléchir très longuement à l’utilisation et à la place de chaque son dans le jeu pour optimiser tout cela.
Toujours dans cette même optique de gain de place et de mémoire, nous avons également dû faire des optimisations sur la conversion. Nous avons donc créé plusieurs paramètres de conversion dans Wwise, certains étant utilisés uniquement sur certaines plateformes comme la Switch. Ainsi, en passant tous les effets sonores en ADPCM sur cette console, nous avons pu avoir un gain de place important pour une très faible perte de qualité, tout en gardant un résultat plus optimal sur les musiques (l’élément clé du jeu) en Vorbis.
Synchroniser les feedbacks audio aux actions du joueur
La plupart des jeux acceptent une certaine latence entre le moment où le joueur appuie sur un bouton et le feedback sonore de l’action. Dans Headbangers, il était impossible de se satisfaire de cette latence. En effet, pour un jeu musical, si le décalage entre l’appui et le feedback sonore sont importants, c’est toute la perception du joueur qui est brouillée.
Nous avons donc décidé d’appliquer des paramètres de streaming à certains sons directement liés au gameplay. Définir qu’un son sera streamé permet de l’appeler plus vite et donc d’avoir un vrai gain de latence audio. Le tout est ensuite de bien paramétrer le Prefetch length pour chaque son, pour éviter les effets de source starvation ou les coupures audio intempestives.
Dans l’un de nos minijeux nommé Piano Mezzo Forte, il s’agit de faire chanter notre pigeon par-dessus une musique de fond. Nous avons donc créé un event pour chaque note dans chaque nuance (Piano, Mezzo, et Forte) et paramétré leur Prefetch length selon leurs caractéristiques et leurs durées. Même si le but final était d’avoir un résultat totalement ridicule, cette synchronisation quasi parfaite était très importante, comme vous pourrez le constater dans la vidéo ci-dessous.
Musiques dynamiques des menus
Ce que j’apprécie particulièrement dans Wwise, c’est la facilité avec laquelle on peut y créer de la musique dynamique.
Même si Headbangers n’a pas été le jeu dans lequel nous avons eu le plus de besoins à ce niveau là (le jeu est finalement très scripté), je me suis amusé dans les menus à créer des musiques dynamiques et très changeantes, ce qui est toujours apprécié par les joueurs.
Notre menu principal est composé de plusieurs onglets, représentant chacun un menu différent du jeu : Home, progression, challenges, personnalisation, shop, options (voir vidéo ci-dessous).
Pour créer cet effet de musique dynamique, le procédé est simple. J’ai créé une musique par menu, avec la contrainte que toutes ces musiques aient le même tempo, la même durée, et la même progression harmonique. Il suffit ensuite d’utiliser les transitions de Wwise pour créer une règle de transition immédiate en “Same time as playing segment”, et vous pouvez passer d’un point dans un morceau à ce même point dans un autre morceau de manière fluide et efficace.
Ce sont des choses très simples et rapides à mettre en place, et l’effet est toujours satisfaisant. Wwise nous a vraiment aidé à répondre à beaucoup de challenges sur Headbangers et nous considérons qu’il s’agit d’un moteur audio réellement fiable et robuste tout en étant suffisamment accessible et intelligent pour les compositeurs ou sound designers.
Commentaires