Journal de bord

Journal de bord

Par Swing Swing Submarine Blog créé le 08/01/10 Mis à jour le 05/04/15 à 22h03

Ajouter aux favoris
Signaler
Seasons after Fall

Salut tout le monde,

Quoi ? On n'a pas fait de post cette semaine encore ? Laissez-moi corriger ce rythme pas très sérieux !

Cette semaine, on va parler son. Je préviens, je ne suis pas expert en programmation sonore, alors certains risquent d'avoir le poil qui se hérisse !

Le son jusqu'alors

Depuis le début du développement de Seasons, nous nous sommes très peu préoccupé de la partie sonore. La seule passe de sons a été faite par William lors de la conception du 1er prototype. Elle consistait en la fabrication de bruitages sonore style 8bits avec l'excellent logiciel sfxr !

Pour poursuivre l'aventure, nous avons besoin de sons (bruitages et fonds sonores) plus réalistes, moins 8 bits style ! Et la manière de jouer ces sons doit aussi être plus "réaliste".

 

Nouveaux types de sons

Nous avons deux types de sons : les sons spatiaux et les sons ambiants.

Les sons spatiaux sont des sons dont le volume varient en fonction de la distance entre l'émetteur sonore et le récepteur sonore (micro).

Les sons ambiants sont des sons que l'on entend de partout, quelque soit la position du récepteur sonore.

Voici un petit schéma récapitulatif qui montre 2 niveaux de jeu. L'un des niveaux possède un son spatial et l'autre un son ambiant. Les deux niveaux de jeu sont reliés par un système de portes.

Spécificités du son spatial

On remarque que le son spatial possède 3 caractéristiques :

- une position : c'est de là que le son est émis

- un périmètre intérieur (ici en jaune). Si le récepteur sonore (micro) se trouve à l'intérieur de ce périmètre, alors le son est joué à 100% de son volume maximal.

- un périmètre extérieur (ici en orange). Quand le récepteur sonore entre dans ce périmètre, le son devient audible. Plus le récepteur sonore s'approche de la frontière avec le périmètre intérieur, plus le son devient fort. Bien entendu, lorsque le récepteur sonore est positionné au delà du périmètre extérieur, le son n'est plus audible du tout.

Certaines librairies sonores permettent de gérer ce que l'on appelle des "sons 3D". La librairie que nous utilisons actuellement (irrklang) permet sur le papier de gérer automatiquement des sons 3D.
Malheureusement, on n'a pas la maîtrise totale sur la manière dont les sonorités sont atténuées. Ceci car on ne peut indiquer à cette librairie qu'un périmètre externe au delà duquel un son 3D n'est plus atténué. La fonction d'atténuation n'est pas réglable et on se retrouvait avec des sons audibles depuis bien trop loin... on a donc décidé de gérer nous même l'atténuation et le "pan" (répartition gauche-droite du son).
On se retrouve donc avec des sons 2D classiques qui ne gèrent pas d'eux-mêmes l'atténuation sonore et le "pan", c'est notre moteur qui va modifier le volume sonore et le pan de chaque son 2D que l'on veut gérer comme s'il s'agissait d'un son 3D.

Spécificité du son ambiant

Le son ambiant est un bête son 2D que l'on entend de partout. Nous avons cependant limité son écoute à l'intérieur du niveau où il a été créé.

Un son 2D dit "ambiant" joué en boucle peut aisément faire office de fond sonore à l'intérieur d'un niveau.

Mise en pratique

C'est bien beau tout ce texte et ce baratin technique, mais ça donne quoi pour le moment l'intégration des sons dans Seasons ?

Et bien ça donne ce que l'on trouve dans la vidéo suivante. Attention toutefois : les sons présents ne sont pas les sons définitifs mais des sons pour tester. Les niveaux sonores n'ont pas été affinés non plus.

Alors qu'est-ce que l'on voit dans cette vidéo ?

- un son ambiant de pluie qui tombe pour le printemps (bon certes on est dans une map de test donc y'a pas les effets de pluie... mais laissez libre cours à votre imagination)

- un "crossfade" lors du changement de saison de printemps à automne

- le "crossfade" laisse place à un son ambiant d'automne (qui serait plutôt un son ambiant pour l'été mais bon... faut pas trop en demander à un programmeur, en général ça connait pas les saisons parce que ça sort pas très souvent).

- le moulin se met à tourner en automne, on vous laisse deviner pourquoi (y'a un indice sonore avec un son spatial). Le moulin émet également un son spatial de couinement.

- le son spatial de couinement du moulin s'atténue lorsque le renard s'en éloigne, et redevient plus audible lorsque le renard est à proximité. Ne cherchez pas l'effet stéréo, la vidéo est encodée en mono !

- lorsque le renard marche, on entend un bruit de pas générique synchronisé sur son animation.

- le renard passe à travers une porte pour atteindre un autre niveau. C'est l'occasion d'un nouveau "crossfade" sonore. Ce nouveau niveau possède un son d'ambiance caverneux. 

Les backstages : Blender !

Les plus curieux peuvent se demander comment sont joués les sons. Est-ce un script spécial qui lance les sons au cas par cas ? Ou est-ce un procédé plus ou moins automatisé.

Nous avons choisi d'automatiser au maximum la gestion des sons. Pour se faire, regardons comment le son de couinement du moulin est paramétré dans l'outil favoris de William : Blender !

 

Cas du moulin

Dans le cadrant haut-gauche de l'image se trouve la scène visuelle où a été placé une enceinte rouge qui est un objet invisible au final mais qui nous permet de positionner le son.

Blender ne gérant pas les sons, nous avons créé un composant permettant d'indiquer que l'enceinte rouge doit être considérée comme la source émettrice d'un son. Ce composant se nomme "SSSSound" et est visible dans la partie bas de l'écran.
On retrouve dans ce composant des paramètres qui indiquent entre autres que le son est spatial, que sa portée maximale est de 8 mètres et qu'il est parfaitement audible quand on est à 4 mètres ou moins de l'émetteur.

Le son ne doit pas être joué directement, car le moulin n'est pas obligatoirement en mouvement. Il nous fallait donc rajouter dans Blender un élément permettant de déclencher/arrêter des sons. Cet ajout a pris la forme d'un nouveau bloc de séquence visible sur la partie droite de l'image (rectangle vert).
Ce "Trigger Area" va démarrer un son si une animation est jouée dans un intervalle donné (ici l'intervalle fait la largeur de toute l'animation).
A l'inverse, le "Trigger Area" va stopper un son alors en lecture si l'animation vient à s'arrêter.

Le son déclenché par un "Trigger Area" est forcément un son joué en boucle. Pour les sons joués une seul fois de temps en temps, nous avons intégré un autre bloc de séquence...

 

Cas du renard

Le renard, lorsqu'il marche, émet des petits sons de pas. Ces sons non bouclés vont être joués par le bloc de séquence "Trigger Start".

On retrouve la même configuration de fenêtre Blender que dans le cas du moulin. Mais cette fois-ci, le séquenceur de la partie droite possède 2 séquences dites de "Trigger Start" qui sont là pour lancer des sons non bouclés (en l'occurrence des bruits de pas).

Pour bruiter la marche du renard, il suffit de faire avancer l'animation aux endroits voulus (en général quand un pied prend appuie sur le sol). De là on rajoute une séquence "Trigger Start". L'important dans ce type de séquence, c'est l'endroit où elle démarre. En effet, dès que l'animation "rentre" dans le trigger, alors le son non bouclé est joué. Contrairement au type de séquence précédant, on se moque de la longueur visuelle de la séquence, le son étant déclenché à chaque fois que le temps de l'animation (représenté par un trait transversal et vertical vert foncé dans la partie droite de l'image) rencontre un bloc de séquence "Trigger Start".
Dans le cas présent, à chaque boucle d'animation, 2 sons sont joués.

 

Conclusion

Le système embryonnaire actuel va bientôt pouvoir être utilisé par William (qui trépigne d'impatience à l'idée, je le sens !).

Il reste cependant pas mal d'améliorations à apporter, comme une intégration plus correcte du "pan" (répartition gauche/droite) pour les sons spatiaux. Les sons spatiaux auront certainement aussi besoin de zones d'atténuations non circulaires. Par exemple une forme de capsules comme suit :

 

Avec une forme de capsule pour la zone d'action des sons spatiaux, on pourrait donner plus de verticalité ou d'horizontalité aux sons. Nous allons voir si les cercles actuels suffisent en testant les sons sur de vraies niveaux et en s'appliquant sur le paramétrage des sons.

Voilà, c'est à peu près tout pour ce post un peu technique (et potentiellement chiant). N'hésitez pas à réagir dans les commentaires si vous voulez plus de précisions sur certains points ou que vous voulez partager votre expérience sur la question avec nous.

Pour ma part, n'ayant jamais touché à de la programmation sonore auparavant, je pense que certains ici auront beaucoup à m'apprendre, donc n'hésitez pas !

Guillaume

Ajouter à mes favoris Commenter (24)

Commentaires

Swing Swing Submarine
Signaler
Swing Swing Submarine
Oki, mais sous Unity c'est Javascript plutôt que Java. Mais de toute façon ça revient au même parce que ça a plus ou moins la même tête : des classes qui héritent de MonoBehaviour et qui ont une méthode Start et une autre Init et consorts :)
Après tu rajoutes ce que tu veux (méthodes) ou tu fais des classes "Helper" qui n'héritent pas forcément de MonoBehaviour.

Pour le Javascript, sous Unity 2.6 y'a pas de classes juste des fonctions mais il me semble que sous Unity 3 la javascript a plus la même gueule, il m'a semblé voir des classes (à moins que mes yeux m'ont dupé).

Et en C# t'as pas mal de containers (List, Array, etc...) je sais pas comment ça se passe via Javascript.


Pour finir, je te conseille vivement de passer sous Unity 3 free et d'utiliser MonoDevelop comme éditeur de script et non pas Unitron (sous Mac) ou UniSciTE (sous winwin). Monodevelop est livré et installé avec Unity 3 (dans path\Unity\MonoDevelop\bin). Ca se change dans unity : Edit > Preferences... > tu changes le "External Script Editor".

Apparement Monodevelop fonctionnait déjà plus ou moins avec Unity 2.6 mais là la complétion de code et l'update entre Unity et Monodevelop marche trèèès bien.

Bon code!

Guillaume
hairaz
Signaler
hairaz
Java, c'était plutôt pour coder sur Unity, étant donné que c'est plus connu que le C#. Bon, après, je ne sais pas si j'en aurais besoin, les rudiments de C# qu'il y a dans le Programmatech permettent déjà pas mal de choses. :)
Swing Swing Submarine
Signaler
Swing Swing Submarine
Salut hairaz!

Ça m'a l'air cool sur le papier un Mario Sokoban :) Toi aussi tu fais des mash-up :P !

Pour ce qui est de prototyper et de jeter, je pense que c'est une approche assez saine. Par contre c'est clair que si t'as tendence à jeter trop ça devient problématique !
A SSS, on essaie de pas trop jeter de trucs sur Seasons, même si on a déjà effectué des revirements de design et qu'on a fait un proto de manière itérative : le code est resté a peu près le même (il a évolué) mais les assets ont subi des itérations successives en fonctions de nouvelles features qu'on apportait.

FFVI... rahhh que de souvenirs que tu me ramènes là :)

Sinon pour prototyper rapidement, Unity c'est le must. après si tu veux faire de la 2D Java ça doit être pas plus mal (mais bon, avec Java tu peux aussi t'amuser avec de la 3D via JOGL, et Notch avec Minecraft l'a bien compris !).
Dans les 2 cas ce qui est cool c'est que tu peux avoir un truc qui tourne "in-browser", pratique pour faire tester à des gens, justement pour itérer sur des prototypes.

Mais bon, je m'égard :) comme d'hab.

++
Guillaume
hairaz
Signaler
hairaz
En fait, je n'ai pas fait bien grand-chose, juste un Mario Sokoban en fait ^^, que j'améliorais de temps à autre (son, chronomètre, mais toujours très basiquement).
Quand j'ai eu fini ca, je me suis dit qu'étant donné que je n'y connaissais que très peu de choses en prog, en game design, en graphisme, en animation, en bruitages, etc. , je me suis dit que j'attendrais d'avoir une bonne idée pour me lancer. J'ai fait 2-3 prototypes de temps à autres, mais j'ai la mauvaise manie de chiffoner et de jeter à la poubelle mes brouillons quand je ne suis pas satisfait. Ce qui devient LE vice ultime devant un ordinateur.
Bref, si j'ai un peu de temps (donc quand j'aurais fini FFVII, ce qui devrait arriver pendant les vacances), je me mettrais un peu à Unity (voire au Java !).
Swing Swing Submarine
Signaler
Swing Swing Submarine
@TinyToony:

Oué j'avais pas pensé à l'éventualité du sexe du fork :)

@Druss:

Ce que je trouve de cool dans ton parcours, c'est le fait que tu es accumulé de l'expérience ça et là :)
C'est une question que je me pose toujours, si un jour j'ai un CDI dans une boite de JV (quoi???! un CDI !!!). Et bien je sais pas ce que j'en ferais... est-ce que je resterais ad vitam æternam dans la dite boite ou est-ce que je démissionnerais pour aller voir si l'herbe est plus verte ailleurs (ce qui est rarement le cas je pense au passage).
Pour l'instant je me dis que c'est pas mal de vagabondé comme je le fais, tant que je suis "jeune" et que je ressente pas forcément le besoin de me poser :)
Et sinon la joue pas rabat joie comme moi (avec mon "oh mais cet article va vous saouler"), je suis sûr que t'es un autodidacte moins "ras les paquerettes" que tu le prétends :)

Guillaume
Druss
Signaler
Druss
Je ne vois pas ce que mon parcours a de cool, mais merci. On fait comme on peut, en effet ^^'

C est vrai que je suis autodidacte, mais niveau "paquerettes", hein. lol Beaucoup de choses a apprendre...
TinyToony
Signaler
TinyToony
"J'espère que ça roule de ton côté la prog Ainsi que ton fork (haha seul un programmeur peut la comprendre celle-là)."

LoL ! On ne me l'avait jamais faite celle là, excellent :thumbup: Par contre, dans mon cas, il faudrait pouvoir employer ce terme au féminin. :)

Sinon, tout va bien de mon côté, merci.

Bon courage pour la suite.
Swing Swing Submarine
Signaler
Swing Swing Submarine
@TinyToony:

T'inquiet', d'autre viendront, et j'essaierais de pas me plaindre de ma condition de faiseur de trucs chiants dedans ^^ :)
J'espère que ça roule de ton côté la prog ;) Ainsi que ton fork (haha seul un programmeur peut la comprendre celle-là).

@Druss:
Bien vu pour Julien Lepers :) Je m'y serais cru !
Sinon c'est cool pour ton parcours, apprendre sur le tas et avoir plein de jobs je trouve ça cool. C'est un peu ce que je fais au final avec la programmation sur Seasons, j'essaie de faire un peu tous les posts de programmation (affichage, outils, sons... et le plus douloureux au départ : gameplay). William donne pas mal aussi avec l'art, le LG/GD et la paperasse administrative !
On fait comme on peut avec ce qu'on a ! Hehe.

Sinon pour Blender/Gimp/C++ c'est cool. Perso je suis toujours impressionné par les autodidactes en programmation. J'ai toujours eu peur de me lancer, et je regrette un peu de n'avoir vraiment commencé à programmer que lorsque je suis rentré en DUT info ! Avant cela j'avais juste suivi des "ateliers" de visual basic durant le temps de midi au collège ! Raaaa, si je pouvais remonter le temps et me bouger le derch' pour commencer à programmer à 14/15 ans comme certains ici sur GB ! Pffff, ces jeunes, ils m
Druss
Signaler
Druss
Rassures toi : on n a pas parler de mon parcours pro. lol
( A lire à la Julien Lepers ) Apres avoir foiré mon cursus scolaire, je me retrouve a passer un diplome dans les metiers d'usinages parcequ on voulait de moi nulle part ailleurs. Diplôme que je n obtiendrai pas par manque de motivation. Ainsi donc, voila une dizaine d année que j écume le nord-est de la france passant d un boulot a un autre. Mon metier? Agent de fabrication.

Par rapport au dev, je n'ai que quelques notions de C++, pas de quoi se pavaner. lol Je touche un peu a Blender et the Gimp, mais comme tu l as dit, c est pas evident apres le boulot. En tout cas je vais essayer Unity 3. Merci
TinyToony
Signaler
TinyToony
Post très intéressant, comme d'hab !

N'hésitez pas à nous abreuver encore de cette belle prose technique :)
Swing Swing Submarine
Signaler
Swing Swing Submarine
@Enimal: *smack


Salut Druss !

Merci pour tes jolis mots toi aussi Et quid de ton parcours pro ? On a surement du en parler mais j'ai du oublier comme un con.

Et puis si tu veux assouvir ton intérêt dans le dev, tu peux toujours faire comme nous : développer dans ton salon (certes uniquement les soirs & week end) Enfin je dis ça mais c'est assez dur après le taff de se remettre derrière un Pc. :P

En ce moment je testouille un peu les nouveautés d'Unity 3, et j'avoue qu'ils ont pas mal remanié l'ergonomie de certains trucs (et on peut enfin facilement coder avec un éditeur sympa: Monodevelop, embarqué avec l'installation d'Unity ^^). Donc si t'es chaud, Unity est un truc sympa, où le son (2D ou 3D) est d'ailleurs bien intégré (je viens de tester à l'instant).

Et merci encore pour ton intérêt pour le blog !

Guillaume
Druss
Signaler
Druss
Quand je lis vos posts, ça me fait penser que j ai loupé ma vocation tant je trouve ça intreressant... lol
ET je pense que vous avez bien compris que, non, vos articles ne sont pas chiants. On adore ça! :)
Enimal
Signaler
Enimal
Je comprend, mais si t'a un minimum de recul, tu te rendra compte que ce blog est très intéressant, et qu'en vous lisant, on découvre tout un univers dont on ne soupçonnais pas l
Swing Swing Submarine
Signaler
Swing Swing Submarine
Oki, promis je referais plus :) La prochaine fois c'est vous qui nous direz ça ici même !

C'est que c'est toujours l'angoisse du post. Est-ce que ça va plaire, est-ce qu'on est pas en train de saouler, etc. etc.

Pour le coup ça a eu l'inverse effet kisscool et j'en suis désolé ^^

Merci pour ton feedback Enimal !

Guillaume
Enimal
Signaler
Enimal
Merci pour cet article, en plus j'ai presque tout compris du premier coup.
Et je rejoins hairaz, arrêtez de dire que vos articles sont chiants, par ce que pour le coup, c'est vraiment chiant de vous contredire à chaque fois, si jamais un article est pas terrible, on se gênera pas pour vous le dire. :)
Swing Swing Submarine
Signaler
Swing Swing Submarine
Raaah FMOD, j'ai de bon souvenir avec FMOD (souvenirs de DUT hehe). Mais j'avais très peu approfondi la chose.

Quoiqu'il en soit FMOD et irrklang sont des librairies payantes pour un usage commercial, et comme on a pas beaucoup de thunes je vais devoir en changer un de ces jours. Certainement pour OpenAL via le wrapper des mecs de Frictional Games dont le code source avait été releasé à l'occasion de le Humble Indie Bundle.

Du coup t'avais fais quoi avec la SDL et FMOD ? un jeu ? un serious game ? une application interactive ? (je suis curieux hehe).

Sinon Merci hairaz de dire que l'article ne t'as pas paru chiant :) C'est sympa.
Je mets toujours des évocations à la chianteur dans mes textes parce que j'ai bien conscience que nous sommes sur un site de jeux vidéo, pas de programmation. Donc je pense que certains doivent vraiment être saoulé par de tels blogs :) Mais il en faut pour tous et tu es là, ainsi que les autres fidèles lecteurs. Et pour ça : MERCI ^^
hairaz
Signaler
hairaz
J'ai déjà un peu touché au son avec FMOD, du temps ou je louchais du côté de la SDL, mais je doute qu'elle gère du son spatial. Enfin, les bruitages n'étaient pas ma priorité, il fallait déjà que je fasse quelque chose qui tienne la route ... 10 secondes au moins.

Par contre, arrêtez de dire que vos articles sont chiants, on doit vous contredire à chaque fois -_-
Swing Swing Submarine
Signaler
Swing Swing Submarine
Hehe beauregard, on sent le vécu :)

C'est vrai que c'est pas évident de faire des bons sons 8bits. William c'était pas mal démerdé avec les sons 8bits, c'est clair que j'aurais été incapable de faire ce qu'il a fait en 8bits style (faudra qu'on les poste un jour, histoire de voir si vous arrivez à retrouver quel son correspond à quoi... dans une sorte de blind test ^^).

Perso je pratique aussi le pifomètre avec sfxr :)

Guillaume
beauregard
Signaler
beauregard
Encore un bel article, et c'est vrai que sfxr est un freeware qui dépanne et il est génial :)
Je retouche les sons, "au pifomètre", avec SoundEditor et Audacity, mais c'est difficile d'obtenir exactement ce que l'on veut, et c'est là où on se rend compte que bruiteur, c'est un métier. Et puis on peut pas tester le soir à cause des voisins ;)
Swing Swing Submarine
Signaler
Swing Swing Submarine
@Mestaty:
Merci pour les sons spatiaux. C'était encore un peu du bricolage mais les paufinages viendront. Par exemple pour le moment la fonction d'atténuation est linéaire... alors qu'il faudrait qu'elle soit plus courbée, genre 2ème degré.

@SeeDreeks:
Merci pour tes jolis mots :) Ca fait toujours plaisir. Même si j'en conviens, certains passages doivent être assez lourdingues à lire (parce qu'assez fouilli au final).

Guillaume
SeeDreeks
Signaler
SeeDreeks
Encore un article intéressant à lire. Je ne m'en lasse pas. C'est génial de suivre toutes les étapes de Seasons.
Mestaty
Signaler
Mestaty
tres sympa le son spacial ^^
bonne continuations....
Swing Swing Submarine
Signaler
Swing Swing Submarine
Merci Mayto pour ton retour sur XP avec OpenAL :)
Le son, c'est un peu comme le moteur physique... faut pas trop laisser faire la librarie et vaut mieux que le moteur du jeu gère ça lui même ^^ Comme ça on maitrise ce que ça fait :)

Guillaume
Mayto
Signaler
Mayto
Superbe article, bien expliqué et intéressant ;-)
L'intégration dans Blender à l'air très réussie !
Pour ce qui est de la programmation sonore, je te comprends, je galère aussi avec l'OpenAL...
Bon courage pour la suite !

Édito

Grâce à ce mini-devblog en français, vous pourrez suivre l'activité de notre minuscule studio de développement indépendant Swing Swing Submarine.

Nous sommes une petite équipe d'hommes et de chats passionnés qui souhaitent partager de nouvelles expériences interactives avec les joueurs du monde entier, et ceux de Gameblog en font bien évidemment partie !

--------------------------------------------------------

Quelques liens utiles :

> Site officiel <

> Twitter <

> Facebook <

Archives

Favoris