FEVRIER 2017

INTRODUCTION ET DIRECTION DE PROJET - Lauriane

Introduction

Février était pour Unexpected un mois intense, plein de défis et de nouveautés et il a éprouvé les qualités de l’équipe tant en terme d’efficacité que de dévouement.

 

L’équipe avait un double objectif : communiquer pour la première fois sur son premier jeu, dWARf et travailler sur « l’éditeur de Nain » la première feature du jeu qui devait être présentée à la Lyon eSport.

 

 

Lyon Esport qui sera d’ailleurs la première réelle échéance proche pour Unexpected qui, jusque là, s’est organisé autour de deadlines à moyen et long terme. C’est aussi une échéance inflexible, l’événement se déroule le 4 mars et il n’y a pas de marge de manœuvre autour de cela. Finalement, c’est une présentation au public, il faut donc un produit impeccable qui résume au mieux notre travail.

 

 

C’est dans ce contexte et vers ces objectifs que ces blogs sont orientés ce mois-ci afin de présenter les aventures de ce mois de février.

 

Ces blogs sont un premier exercice que nous chercherons à améliorer constamment, n’hésitez pas à nous faire vos retours !

Gestion de Projet

L’idée d’aller à la Lyon eSport est venue par hasard, en apprenant que l’événement proposait un espace jeux vidéo indépendants. dWARf en étant aux prémices de son développement (et à peine commencé en terme de graphismes 3D), il était ambitieux de vouloir présenter quelque chose si tôt.

 

Cependant, je tente tout de même une réunion avec l’équipe pour avoir les avis de toute l’équipe sur nos capacités à créer quelque chose de montrable avant mars. Nous convenons rapidement qu’il n’est pas possible de créer une démo du jeu avant cette date, les pré-requis en gameplay et animations sont trop nombreux, sans compter qu’il n’y a aucune texture et qu’il faut à la fois travailler sur de la conception de personnage et d’environnement, tout cela en 3D.

 

 

Une solution nous vient rapidement à l’esprit, le modèle économique du jeu et les récompenses se basant essentiellement sur l’aspect cosmétique du nain, nous réduisons considérablement le nombre de tâches en décidant de se concentrer uniquement sur l’éditeur de Nain, première fonctionnalité du jeu que rencontreront les joueurs lors de leur première connexion à dWARf.

 

 

L’éditeur est déjà conçu et même en partie codé, il lui manque une interface et, évidemment, des objets et des textures en 3D à intégrer au nain.

 

Nous nous mettons d’accord sur un nombre d’objets à modeler et texturer pour la Lyon eSport, ainsi que sur leur originalité. Nous optons pour des pièces toutes différentes qui permettent au mieux de se rendre compte de la future variété des objets esthétiques disponibles. Nous sélectionnons aussi quelques animations à intégrer pour rendre le nain plus vivant.

 

 

L’interface a déjà fait l’objet d’une réunion, lors de laquelle des décisions en terme d’ergonomie et d’esthétiques ont été prises, cependant, nous devons définir les limites dans lesquelles s’inscrit l’interface de l’éditeur présenté à la Lyon eSport.

 

 

Le bon côté c’est que notre dev gameplay peut aussi travailler à un prototype qui sera sûrement le sujet d’un prochain blog.

Alors qu’ils travaillent là dessus, je discute avec notre dev multi sur la possibilité de faire un jeu de piste avec la communauté qui est réunie sur nos réseaux sociaux. Le but est de préparer la pré-alpha et de donner l’opportunité à des gens très impliqués de participer aux toutes premières sorties du jeu et aux différents tests.

 

Ce jeu de piste nous donne aussi la possibilité d’introduire dWARf et son univers avant la Lyon Esport et d’en dévoiler un peu plus sur ce nouveau projet.

 

Pour plus d’informations sur le déroulement du jeu de piste je vous invite à aller regarder ici le document résumant tout le jeu créé par la fantastique communauté qui a participé.

 

Faire un jeu de piste était une expérience inédite et très enrichissante mais aussi très dure à gérer pour une toute petite équipe comme la nôtre. Ça a demandé beaucoup de temps et d’implication quotidienne, c’était aussi notre premier contact communautaire, il nous fallait donc être très présents pour comprendre toutes les attentes et prendre immédiatement en compte les remarques pour faire évoluer le jeu (notamment dans sa difficulté).

Dans sa généralité, le jeu de piste était cependant pour nous une franche réussite même si ce n’est pas quelque chose que nous réitérerons tous les deux mois !

 

GRAPHISMES 2D - Audrey

Après avoir évoqué la nécessité de travailler sur l’interface de l’éditeur de Dwarf, je réalise 2-3 propositions et peaufine l’une d’elle dans un style assez cartoon et coloré. Peut-être un peu trop même. Mes réalisations personnelles étant en général très désaturées, en aplat, je me lâche!

 Entre la deadline de la Lyon Esport et mon emballement personnel pour proposer quelque chose rapidement, nous n’avions pas vraiment réfléchi à quel style faire. Mais la réalisation assez rapide de ces premiers prototype nous permet néanmoins de rapidement voir le problème de cette première approche :

En effet, le jeu sera riche visuellement, et en 3D. Même dans les pages hors jeu. Pour conserver en lisibilité et en modernité, l’interface doit donc pouvoir venir en superposition sur un univers relativement chargé. Et comme on ne remasterise pas Adibou, je dois trouver un nouvel angle d’attaque graphique.

On évoque l’interface des sites web/app actuels, sobres, aux animations interactives subtiles et sensouales. Cette direction semble plus adaptée.

Pour l’éditeur, nous avons également besoin de différentes tenues à essayer sur notre nain. Liam a dessiné certains éléments pour commencer à le modéliser.
Je rajoute un bon paquet d’éléments de type pilosité (moustache, barbe, coiffure, sourcils) et je peux alors commencer un point clé: le concept art de ses tenues. J’ai d’abord travaillé sur dessets complets, par soucis d’homogénéité (avoir un nain harmonieux, c’est mieux).
Mais après quelques jours, l’équipe souligne que travailler par type d’objet semble plus adéquate. Dans un éditeur, j’aurais en effet tendance à fonctionner par coups de coeur ponctuels. Les tenues pensées comme un set complet seront rares, pour en conserver le prestige et l’harmonie extrême (dans l’idéal, maintenant ‘faut l’imaginer!).
L’homogénéité passera donc par le style, les couleurs, les thèmes (médiéval, mythologie, anachronique, rigolo…).
Je commençais également à voir les limites de cette méthode en terme de créativité, du coup l’idée fait consensus, et me voilà à travailler sur des planches d’objets (casques / ceintures / vetements / épaulières / gantelets), plutôt par thème (pour éviter de me retrouver avec une majorité d’objets trop décalés de l’univers du jeu).

GRAPHISMES 3D - Liam

La création du Dwarf

Avec dWARf, nous avons l’objectif de créer un jeu cartoon et amusant. Nous voulions donc qu’il soit peuplé de personnages sympathiques et rigolos. Or, j’ai pour ma part, le sentiment que dans la plupart des films d’animation et jeux vidéos, ce sont les attitudes qui définissent vraiment la caractère d’un personnage. Que sa manière de se mouvoir est finalement ce qui va lui donner sa propre personnalité et sensibilité, et donc, qui va le rendre attachant et vivant.

Leur design devait donc être original, et nous permettre de pouvoir créer par la suite des animations comiques et variées.

 

Nous nous sommes donc mis d’accord sur des personnages « flottants », sans bras ni jambes, mais portant de gros gants et épaulettes simulant la position d’un bras, afin de garder une certaine crédibilité et réalisme dans leurs mouvements.

 

Nos Dwarves auraient donc une silhouette allongée, tout en gardant le profil bedonnant représentatif du nain, qui nous permettrait par la suite une plus grande variété et liberté dans les animations que si nous avions conservé une allure plus ronde du personnage. (Il peut ainsi se pencher en avant, en arrière, se balancer sur les côtés, entre autres).

La customisation du Dwarf

Dans dWARf, le joueur à la possibilité de créer son propre Dwarf qui sera son avatar au cours des parties, et devra donc être aisément reconnaissable par ce dernier par rapport aux Dwarves des autres joueurs.

    Ainsi, il nous a fallu définir quelles parties des Dwarves allaient être customisables lors de sa création.

     Nous avons décidé de garder fixe la morphologie du Dwarf, dans un souci d’adaptation des objets: en effet, si tous les personnages ont la même corpulence, ils peuvent alors tous porter les mêmes vêtement, sans distinctions, et sans demander des modifications de notre part outre mesure. Les Dwarfs seront donc tous trapus et ventripotents.

    Il en va de même pour les couvre-chefs: Comme nous avions en tête de créer des casques intégraux, qui reflètent bien l’univers du Nain Fantastique, une forme de tête standard permettait à tous les joueurs de pouvoir choisir n’importe quel casque, qui serait forcément adapté à la taille de sa tête.

     Une fois ce cadre défini, tous les autres éléments nous semblaient modifiables facilement.

Les formes de nez, d’yeux et la couleur de peau resteraient fixes après la création du personnage. Cependant, les éléments de pilosité (:sourcils, moustache, barbe et cheveux) pourraient être modifiés à tout moment, aussi bien leur forme que leur couleur, et indépendamment les uns des autres.

Audrey crée donc de son côté un éventail très riche de concepts, qu’elle me transmet, afin que je modélise en 3D le maximum de ces éléments.

     Nous nous sommes à ce moment heurté à un problème important: En effet, certaines coupes de cheveux ne semblaient à première vue pas compatible avec certains chapeaux.

Il fallait donc voir au niveau de l’intégration, comment seraient gérés ces éléments. Nous avons donc réfléchi avec Solune, à la compatibilité de ces éléments. Certains chapeaux prenaient tout simplement la place des cheveux sur le crâne du Dwarf (casque intégraux), d’autres venaient naturellement se placer au dessus des cheveux (petits chapeaux), mais certains cheveux étaient rarement associables avec la plupart des chapeaux (couette au dessus de la tête). Finalement, Lauriane et Solune ont créé des critères de coupe de cheveux qui étaient ou non compatible avec des critères de chapeaux, pour gérer, presque au cas par cas les compatibilités entre tous ses éléments.

      J’ai donc créé différents types de coiffures ainsi que de chapeaux, qui pouvaient être représentatifs de la diversité que l’on aurait plus tard, et permettait de mettre en place la gestion de ces catégories directement.

 

      Dans l’éditeur de Dwarf, le reste des éléments personnalisables sont les vêtements: gants, épaulières, ceintures et tenues. Pour ces éléments là, les problèmes de compatibilités ne se posaient pas, car ils n’étaient pas directement superposés les uns aux autres, mis à part la ceinture, mais qui à priori, aurait pratiquement toujours la même forme et serait toujours placé au même endroit: un anneau autour de la taille du personnage.

      Audrey avait créé des concepts à la pelle pour chacun de ces objets. Comme pour la pilosité, je n’avais pas le temps d’en modéliser beaucoup en 3 dimensions, à cause des délais très courts imposés par la Lyon E-sport. J’ai donc fait le choix de reproduire des éléments les plus divers et à la fois représentatifs de l’univers de notre jeu: des éléments fantasy du monde des Nains, mais aussi des éléments insolites et anachroniques.

Afin de créer le plus possible d’éléments à présenter lors de la Lyon E-sport, je choisissais donc un élément parmi les planches de recherches d’Audrey, et le recréait en 3D au plus proche, pour ne pas dénaturer son concept, mais en prenant cependant des libertés vis-à-vis des textures des objets, ainsi que de petites variations de formes impossibles en trois dimensions, qui sont invisibles en deux dimensions.

Il ne manquait ensuite plus qu’à Solune à intégrer tous ses différents éléments dans le moteur du jeu ainsi qu’à créer les interactions entre l’interface et les modèles 3D.

DEVELOPPEMENT GAMEPLAY - Solune

Intégration de l’UI

Au début, on avait ça :

Une UI unity classique, et un Dwarf composé d’éléments de personnalisation faits de formes primitives déformées. Simple et efficace !

     Malheureusement ça ne suffisait pas à Liam et Lauriane, il a donc fallu faire mieux :

     Dans un premier temps, j’ai intégré l’UI soigneusement préparée par Audrey

Pour en arriver là, il faut faire attention à plusieurs choses :

– les éléments de l’UI doivent être en proportion des dimension de l’écran, pour supporter tous les ratios d’écran et leurs résolutions

– les éléments carrés ont une dimension en fonction de l’écran, l’autre étant fonction de la première

Unity offre des outils permettant de faire ce genre de choses assez facilement :

L’élément aura une largeur de 60 % de son parent, et l’Aspect Ratio Fitter assure qu’il sera carré

     Même vide c’est déjà beau, ça donne envie de remplir tout ça !

Un peu de code

En suite, un peu plus technique : comment ça se passe niveau code.

Le Dwarf étant animé (contrairement au pizzaiolo) et ayant des déformations dans ses animations, les éléments de personnalisation doivent suivre cette déformation. Le plus gros du travail sur ce point est fait par Liam, qui va lier (skinner) différentes parties de l’élément à des parties du corps du Dwarf (bones) mais je dois m’assurer que les éléments suivent correctement les animations lorsqu’ils sont changés dans l’éditeur.

 

     Dans Unity tout ceci se traduit par un composant skinned mesh renderer (pour le skin) et unanimator (avec un Avatar, qui représente les bones). Lorsqu’un élément change il faut donc lier leskinned mesh renderer de l’élément à l’avatar, pour cela, l’élément est instancié en enfant de l’animator puis la fonction Rebind de ce dernier est appelée.

      Jusque là tout va bien, cependant la fonction Rebind remet à zéro les animations du Dwarf, et c’est pas très joli. On sauvegarde donc l’animation en cours lorsqu’on change d’élément, et on redémarre où on en était après avoir fait le changement, au final ça se résume à peu près à ça:

Intégration des éléments

 C’est à partir d’ici qu’on a pu dégager les problématiques liés à la création d’un personnage avec le degré de personnalisation que nous voulions pour dWARf.

     Par exemple, bien que nous voulions le plus de variété possible dans l’éditeur de Nain, nous avons choisi de ne pas pouvoir changer indépendamment les gants droit et gauche (et de même pour les épaulettes) par souci d’esthétique et de cohérence, puisque nos objets de personnalisation appartiennent à des univers variés et souvent uniques.

 

     Comme Liam l’a déjà abordé, un problème s’est aussi très vite posé pour la compatibilité entre les casques/masques et les différents éléments du visage, pour ne pas devoir entrer les combinaisons possibles ou non au cas par cas, des critères de couvre-chef et de chevelure et quelques règles automatisent le processus : les casques intégraux retirent les cheveux, les cheveux irréguliers retirent les couvre-chefs, etc.

Il résulte de ces critères une matrice de compatibilité chapeaux/cheveux toujours ajustable au cas par cas si besoin.

    L’intégration de tous ces éléments n’est donc pas un travail si simple, une fois que je reçois un élément de Liam, je le test pour vérifier qu’il n’y a pas de “bug” graphique, j’utilise un scriptmaison pour créer une icône à partir du modèle de l’élément, je règle ses critères d’exclusion si c’est un couvre-chef ou une coiffure, et vérifie une dernière fois si tout va bien.

DEVELOPPEMENT MULTI - Alexandre

Le mois de février a été assez complet dans le domaine de la gestion multi-joueurs ainsi que la gestion des interactions avec la communauté.

     Le but de mon métier étant de créer tous les liens réseau de communication entre le client et les services d’Unexpected, j’ai été assigné à la création (technique) de l’ARG qui a eu lieu en Février. De plus, des avancements ont été fait sur les différents services, notamment le service de gestion de compte d’Unexpected ainsi que la librairie de communication Serveur de jeu-Client de dWARf.

Avancements au niveau des services Unexpected

Comme dit précédemment, j’ai principalement avancé sur les services de base d’Unexpected durant ce mois: L’accès aux comptes, l’authentification des utilisateurs, la gestion des paiementsen ligne etc… Le but étant de proposer un service pouvant être adapté au plus grand nombre d’utilisateurs de manière simple et efficace.

     Pour cela, j’ai décidé de développer l’application en “cloud ready” ce qui signifie que l’application est pensée de manière à être mise en production sur un ou plusieurs serveurs différents de façon à pouvoir répartir la charge de manière efficace.

     Du coup, j’ai pensé les services avec 3 types de services différents: Des APIs RESTful pour l’accès et la modifications des données, des services de notifications pour les aspects “temps réel” et les services de serveurs de jeu.

Ainsi, on peut représenter l’interaction d’un utilisateur qui ajoute quelqu’un en ami comme ceci:

L’ARG

L’ARG qui a été organisé pendant ce mois a été pour moi un premier challenge au niveau de la gestion de charges d’Unexpected: En effet, c’est plus de 15 000 IP différentes qui se sont connectées durant la semaine qu’a duré l’ARG. J’ai aussi travaillé sur le développement des différentes énigmes (principalement côté dev technique – Programmation, mise en prod, etc.) ainsi que sur l’imagination de celles-ci en collaboration avec toute l’équipe d’Unexpected.

Pour répartir la charge convenablement, j’ai mis en place une architecture simple, mais qui a été efficace:

Et qui a très bien réussi à supporter les requêtes qui lui ont été transférées. C’est un total de 606 188 requêtes qui ont été enregistrées sur les serveurs Web et plus de 6 319 554 interactions enregistrées sur les services en temps réel (H.A.Grid (avec 6 044 913 requêtes en 3 heures) et Andromeda (avec 274 641 requêtes en 5 jours)).

     J’ai été totalement bluffé par la capacité de la communauté à se coordonner! Les énigmes ont été résolues de manière très efficace et on ne s’attendait pas du tout à une si bonne organisationde la part d’une aussi grosse communauté!


     En conclusion, ce mois a été très chargé concernant le développement Multi-joueur et services: Des avancements au niveau des services principaux d’Unexpected ont eu lieu, au niveau des serveurs de jeu (dWARf) et enfin un événement communautaire (ARG) qui c’est extrêmement bien passé de mon point de vue! Je pense pouvoir parler au nom de toute l’équipe Unexpected: Nous nous sommes tous amusés à regarder la communauté interagir avec toutes les énigmes et on est encore plus boosté et hâte de voir les interactions au niveau de notre prochain jeu: dWARf !