jeudi 29 mars 2012

Silence... Action !


Cette semaine on continue le tour des cuisines du jeu, avec un nouveau billet sur la technique. J’ai eu quelques demandes curieuses sur la gestion des caméras, alors je vais vous en parler un peu ! Comme la semaine dernière, ce qui suit est destiné aux curieux qui ont soif de connaissances :)

A première vue, on pourrait se dire que la gestion du point de vue sur un jeu avec un gameplay 2D, c’est plutôt simple. Eh bien oui, il y a moyen de faire simple. Mais nous, on voulait quelque chose qui envoie du cake.

Les premières choses à définir sont des zones de caméras : ce sont en fait des rectangles sur le plan de jeu. Quand le joueur entre dans ce rectangle, la zone est sélectionnée; quand le joueur sort du rectangle, la nouvelle zone dans laquelle il entre est sélectionnée. Si aucune zone n’est trouvée là où est le joueur, … ben ça fait un truc moche. :D

Les rectangles de zone dans la scène, directement réglables

Une zone contient toutes les informations nécessaires au positionnement de la caméra :
  • Décalage par rapport au personnage (sur 3 axes)
  • Rotation de la caméra, pour des effets 3D de la mort qui tue
  • Configuration des bordures :
    • bordure normale, optimisée, qui ne vérifie pas grand chose à part la position du joueur,
    • bordure avec contraintes, un peu plus lourde à calculer, mais qui permet de forcer la caméra à ne pas voir ce qu'il y a en dehors, quelque soit le point de vue, l’angle d’ouverture et le ratio. Ça permet de contrôler précisément ce que la caméra n'a pas le droit de voir, comme la fin des décors.
  • Quelques petites options de réglage fins et d’optimisations, parcequ’on le vaut bien :D
Par dessus tout ça, il y a tout un ensemble qui permet de “débrayer” du système de zone sans faire d’à-coups. Pratique, par exemple pour passer d’une cinématique au jeu normal et inversement.
.
Les paramètres d'une zone

L’outil est rustique, mais terriblement efficace (testé et approuvé sur toute une prod’ !)

A gauche, les lignes vertes délimitent les zones de caméra. A droite, le rendu in-game.


Un des gros problèmes quand on gère des caméras en mouvement (et surtout, surtout quand on change beaucoup les rotations !) est de ne pas faire vomir le joueur. On ne le dira jamais assez, nous autres humains sommes faibles et le moindre déplacement rapide incontrôlé nous donnera mal au crâne. La caméra a donc plusieurs couches de lissage, qui vont toutes à des vitesses différentes selon ce que l'oeil est capable de supporter : 

  • Le lissage de la position par rapport à celle du joueur, qui est assez rapide, pour ne pas perdre Goro lorsqu’il va vite,
  • Le lissage de la rotation, qui lui est plutôt lent, pour ne pas faire mal au crâne,
  • Le lissage du passage du système de zone à un autre système (cinématiques, caméra fixes).

Le lissage en lui-même n'est pas une interpolation linéaire; il utilise des formules de physique (eh oui, on y revient toujours !) pour donner une sensation de ressort-amortisseur qui ne la fera jamais changer de vitesse trop rapidement.

Voilà; j’espère que ça vous a plu, n’hésitez pas à me demander si vous voulez que je parle de quelque chose en particulier la semaine prochaine ! Stay tuned !


 -- L’équipe Upper Byte, seule dans le bâtiment... Il est tard !