Salut,

Nous revoilà pour la 2ème semaine de récapitulatifs des travaux effectués sur la démo de Seasons qui sera jouable sur notre stand lors du prochain Festival du Jeu Vidéo.

Côté Programmation

Path (chemin)

La semaine a commencé par l'implémentation du support des "Path" de Blender dans le moteur du jeu.

Un Path est une courbe positionnée dans un espace 3D que l'on peut parcourir grâce à l'utilisation d'une autre courbe dite paramétrique (en l'occurrence on l'appellera courbe de vitesse).

Exemple depuis Blender :


Path (gauche) et courbe paramétrique de parcours (droite)

Sur la gauche, dans la vue 3D, un Path est positionné, ainsi qu'un cube suivant ce Path.

A droite, on aperçoit une autre courbe, la fameuse courbe paramétrique "speed" pour parcourir le Path. Cette courbe est modifiable par nos soins (tout comme celle du Path), et dans le cas présent elle nous indique que tout objet suivant le Path va le parcourir entièrement entre les images 1 et 100 de l'animation, puis revenir sur ses pas jusqu'au milieu du Path entre les images 100 et 150 de l'animation, pour finir par repartir vers la fin du Path entre les images 150 et 250 de l'animation.

Cette courbe de "speed" permet aussi de gérer l'accélération des objets en fonction de la courbure qu'on lui donne.

Les Paths vont nous être très utiles dans le jeu car on va pouvoir accrocher toute sorte de chose dessus : des objets visuels, des effets ou encore la caméra (pour faire des cinématiques).

Émetteurs de particules

Jusqu'à présent, nous n'avions pas d'effet de particules dans le moteur. Cette semaine fut l'occasion d'implémenter un système embryonnaire. On a donc 2 types d'émetteur de particules à l'heure actuelle :

- Trail (trainée)

Les trainées vont utiliser les Paths présentés au paragraphe précédent pour faire apparaitre des effets longiligne. Petit exemple d'une map de test (désolé pas le temps de faire des vidéos pour le moment) :


Une particule de type trainée au cours du temps


- Spawn (soit l'émetteur de particules classique)

L'émetteur de particules le plus courant est un émetteur qui va créer des particules de tailles, de vitesses, de durées de vie, et de positions de départ diverses (et un peu aléatoires) pour générer des effets comme de la pluie ou de la neige.

Chaque effet demande un réglage des paramètres (avec un peu d'aléatoires dedans). Avec la neige, la taille des particules est plutôt grande et la vitesse lente, alors que pour de la pluie ce serait plutôt l'inverse : une taille étroite et une vitesse élevée.

Voici quelques tests préliminaires avec un seul plan de particules :


Divers tests de particules (de gauche à droite : statique, forte vitesse vers le sud-ouest, vitesse lente vers le nord et fade avant la mort de la particule)

Pour qu'un effet de pluie ou de neige reste toujours à l'écran, il faut que l'émetteur de particules bouge avec la caméra et qu'il émette des particules sur une largeur assez importante pour couvrir tout l'écran. On a donc deux types d'émetteurs : 'local' ou 'full screen'.

Si on se contente de bouger un émetteur 'local', on va rencontrer quelques problèmes de "trous", des endroits où il n'y aura pas de particule à l'écran. Ceci car les particules nouvellement créées le seront dans un rectangle de la taille de l'écran mais rien ne garantit que les particules apparaitront sur le bord de l'écran (dans la direction où nous allons) ou en plein milieu.

Pour palier à ce problème, on déplace les particules vivantes qui viennent de sortir d'un côté de l'écran pour les remettre de l'autre côté. On effectue alors du "Wrapping" de particules, uniquement pour les émetteurs 'full screen'.

Exemple en image :


Wrap de particules pour couvrir l'écran en permanence

Les particules sont colorées en fonction de la position où elles sont nées pour mettre en évidence le phénomène. Ainsi on voit que les bords gauche/droit de l'écran ont des particules de même couleurs car certaines particules ont été déplacées de la droite de l'écran vers la gauche. Elles poursuivront leur périple jusqu'à ce qu'elles meurent.

Voici ce que donne la neige dans le décor neigeux de la semaine dernière :


It's snowing men!

Il reste encore des réglages à faire, mais l'effet est pas trop mal pour un premier jet. On reviendra dessus plus tard quand tous les éléments de gameplay seront implémentés.

Les restes

D'autres choses en vrac :

Écriture d'un script générique pour effectuer des déplacements de caméra lorsque le renard entre dans certaines zones (en utilisant les Paths fraichement disponibles :)).

Correction de quelques bugs (vitesses de déroulements des timelines d'animation qui ne concordaient pas entre le moteur et Blender, rotation en Z des instances de prefabs ne marchait pas).

Côté LD/GD/Art

Graphisme :

Après avoir travaillé à la première passe d'habillage des premiers écrans de jeu, mon cerveau de non-graphiste n'arrivant pas parfaitement à imaginer chaque ambiance, couleur et élément de décor, j'ai senti qu'il était préférable de revenir à un travail papier. C'est pourquoi j'ai imprimé l'ensemble des maps de collisions afin de pouvoir gribouiller dessus.

Certains dessins ont été scannés puis colorisés afin de mieux me rendre compte du travail à accomplir ensuite, et puis aussi un peu pour me rassurer.
Une fois mes doutes dissipés, je suis revenu à la création d'assets, dont une cascade qui ondule magnifiquement ses vertex à l'écran.


Du gribouillis à la colorisation


Intégration de la cascade animée in game

Level Design :

En imprimant les maps de collision, je me suis aperçu que certaines sections de jeux devaient être ajoutées et (beaucoup) d'autres déplacées. Les écrans 10 et 11 (les plus bancals) ont été totalement réagencés de sorte que la succession d'obstacles proposée soit plus naturelle, force le changement des saisons et surtout aide au bon apprentissage des différents éléments de jeu.


Modification LD après tests