I. Introduction▲
Le jeu est une activité humaine universellement partagée, et le jeu vidéo a changé la donne depuis l'arrivée de la 3D dans l'expression graphique et scénaristique. Depuis l'avènement du Web et des tablettes, il connaît une expansion d'autant plus grande. Les types de jeux produits sont très variés, et leur quantité ne cesse de s'accroître exponentiellement.
Les moteurs de jeu permettant de créer soi-même un jeu vidéo existent depuis longtemps, mais la nécessité d'avoir recours à la programmation est une contrainte majeure pour tous ceux et celles qui souhaitent créer et cela reste une étape technique difficile à franchir. Pour d'autres, ce sera la partie graphique ou généralement créative qui sera un blocage. Bref, le jeu vidéo étant un produit culturel complexe, demandant diverses compétences, il fait souvent appel à des équipes plus ou moins nombreuses, sans pour autant empêcher des individus touche-à-tout de tenter leur chance.
Depuis longtemps, le monde du logiciel libre dispose avec Blender d'un formidable outil de création de jeux. Avant les années 2000, il était déjà conçu comme un outil complet de création 3D, incluant l'interactivité, ce qui permettait d'emblée de l'utiliser pour la création de jeux. Cette utilisation n'a pas toujours été mise en avant, mais un regain d'intérêt récent pour le développement de jeux révèle ce potentiel. Néanmoins, le logiciel ne remplace en rien les compétences des collaborateurs qui devront le développer :
- artistes numériques variés (graphismes, sons, 3D) ;
- scénaristes ;
- programmeurs.
De plus, toute autre(s) compétence(s) peut(vent) être utile(s) selon la taille du jeu et ses ambitions.
Le jeu, en tant que mélange d'histoire, d'interaction, d'univers, a besoin de tous ces éléments pour susciter l'intérêt des joueurs. L'un des avantages de Blender est de regrouper en un seul logiciel les éléments de création importants du jeu : le visuel, l'interaction avec les objets et les interfaces, et la programmation. Les différentes parties du travail sont intégrées et augmentent la fluidité du travail d'équipe.
I-A. Objectif de ce livre▲
Ce livre a pour ambition de fournir au lecteur un aperçu des possibilités de Blender dans la création de jeux vidéo et d'en montrer de façon progressive les principaux tenants. Il abordera des besoins récurrents dans la création de jeux et montrera comment procéder avec le logiciel pour y répondre. Il espère combler un manque de documentation francophone sur le travail interactif dans Blender, de manière à aider au mieux les amateurs et professionnels à tirer parti de sa puissance.
Ce livre n'a pas pour objectif de vous faire produire un jeu de A à Z. Il n'a pas non plus l'ambition de vous dire comment réaliser un bon jeu. Dans ce cas, reportez-vous plutôt à un livre traitant du game design. Enfin, il n'a pas la prétention de fournir des recettes qui seront applicables dans tous les contextes. Chaque jeu aura une logique propre et le contenu de cet ouvrage devra être adapté aux différents projets, voire complété par d'autres ressources et recherches qui accompagnent nécessairement l'analyse de faisabilité d'un jeu.
D'une certaine façon, ce livre a une ambition plus grande encore : vous rendre autonome dans votre capacité à utiliser les outils interactifs de Blender, quel qu'en soit l'usage final. Si nous parlons ici de jeux vidéo, il sera utile dans de nombreux autres domaines comme la visualisation architecturale interactive, la robotique, le contrôle à distance d'objet (comme en médecine ou en exploration spatiale), ou encore dans la création artistique interactive et plus récemment dans la réalité augmentée.
I-B. Prérequis▲
Le sujet de ce livre étant déjà très vaste, il nous a semblé important de nous focaliser ici sur les points clés, de manière à ne pas encombrer l'esprit de détails moins importants. Nous essayons d'expliquer le plus clairement possible les fonctionnalités interactives. Nous partons aussi du principe que notre lecteur dispose déjà d'un certain nombre de prérequis :
- être correctement équipé : disposer d'un clavier et d'une souris trois boutons (la molette faisant office de bouton central), un pavé numérique pour changer facilement les vues, voire d'un écran suffisamment grand pour travailler confortablement ;
- savoir modéliser un minimum avec Blender, pour créer des personnages, objets et décors, texturer, gérer des contraintes de base comme attribuer un parent à un objet, éventuellement créer un rig et animer. Si ce n'est pas le cas, n'hésitez pas à vous reporter aux autres manuels Flossmanuals sur Blender ou d'autres documentations qui sont assez nombreuses sur ces sujets ;
- connaître les bases de la programmation. Le langage Python est utilisé dans Blender et, au vu des besoins éventuels en programmation dans le développement du jeu, il n'est pas inutile d'y avoir recours. Ce livre ne présente aucune base en langage Python. Nous considérons que celles-ci sont connues, même partiellement. Si ce n'est pas le cas, nous vous invitons à lire au préalable ou à garder sous les yeux une documentation Python comme celle de Flossmanuals et d'avoir à l'œil la documentation officielle de Python et l'API Python de Blender.
Pour ce livre, nous avons changé le thème de l'interface de Blender pour utiliser celui de la 2.4, et changé la couleur de fond de la vue 3D pour avoir des captures d'écran plus contrastées, et plus lisibles.
Les auteurs de ce livre ont utilisé la version 2.71 de Blender. Ce logiciel évoluant à un rythme soutenu, nous vous incitons à vous inscrire sur cette plateforme pour apporter toute correction concernant des changements qui seraient intervenus ultérieurement.
II. Pourquoi utiliser le Blender Game Engine ?▲
Est-ce que le Blender Game Engine (BGE) est adapté pour créer votre projet ? Après tout, il y a beaucoup d'autres moteurs de jeux vidéo, et votre temps est probablement limité pour pouvoir tous les tester.
II-A. Que peut-on faire avec le BGE ?▲
Le moteur temps réel de Blender permet de réaliser beaucoup de choses différentes.
II-A-1. Du jeu vidéo▲
Comme son nom l'indique, le Game Engine nous permet de créer des jeux vidéo et de le faire assez facilement. En quelques minutes, il est possible de créer un jeu basique, de le lancer et d'avoir une première interaction avec le jeu comme celle de déplacer un objet. En poussant ses capacités, il est possible de créer des jeux ou des simulations très complexes, voire photoréalistes, avec une logique avancée et des interactions sophistiquées.
A priori, tous les types de jeux sont réalisables avec le BGE. Néanmoins, vous ne pourrez pas produire de MMORPG* de nouvelle génération, mais d'un autre côté, vous ne disposez probablement pas d'une équipe de 200 personnes ! Si vous n'avez pas les yeux plus gros que le ventre, votre idée pourra certainement être réalisée.
Même si vous êtes un professionnel du jeu vidéo ou un développeur aguerri, le BGE pourra vous intéresser pour réaliser un prototype de jeu et le tester rapidement. Vous pourrez ensuite éventuellement passer à un autre moteur de jeu plus adapté pour votre concept. Ainsi, vous pourriez ne passer que quelques jours à le concevoir avec le BGE, plutôt qu'un mois à coder avant de tester votre idée.
II-A-2. Des présentations, des visites virtuelles et de la visualisation architecturale▲
Le BGE est souvent utilisé tout simplement pour permettre à un utilisateur (joueur) de se déplacer dans un univers virtuel, en 3D ou en 2D. Si vous êtes architecte, vos clients seront ravis de visiter leur future maison.
Le BGE permet également de présenter un objet ou un produit sous plusieurs angles et de le faire réagir aux clics des utilisateurs.
II-A-3. Des simulations et des prototypes scientifiques▲
Il est possible de faire des simulations 3D, avec de la physique rigide, comme une chute d'objets ou une simulation de voiture.
Si vous exercez un métier dans le domaine de la réalité virtuelle et que vous cherchez à tester vos concepts, le BGE est peut-être une bonne solution. Des médecins ont utilisé Blender pour simuler des opérations chirurgicales avec retour de force.
II-A-4. En pédagogie pour des animations interactives ou des Serious Game▲
Le monde de l'éducation et de la formation cherche toujours de nouvelles solutions pour la diffusion de contenu et surtout pour rendre ses contenus plus attrayants. Les logiciels éducatifs pour enfants, mais aussi les MOOC* ou plateformes de formation à distance, nécessitent la réalisation d'animations interactives qui permettent aux apprenants de tester. Blender peut alors se prêter à cette utilisation autant que d'autres. On peut également imaginer réaliser des Serious Game avec le BGE, c'est-à-dire des jeux à but pédagogique qui reproduisent une situation réelle qui serait dangereuse (apprendre à ne pas jouer avec le gaz de la cuisine par exemple).
II-A-5. Des installations artistiques interactives et en temps réel▲
Le BGE est aussi utilisé pour des installations artistiques, intégrant de l'interaction avec le public. La possibilité d'intégrer tant du contenu 3D, 2D, que du son et des capteurs (grâce au développement en Python) permet de développer des projets complexes et variés.
L'intégration de la texture vidéo permet également de concevoir des environnements appliquant la vidéo sur des surfaces non planes. Ceci permettant ce qu'on appelle maintenant le mapping, c'est-à-dire le fait de texturer des objets réels par des projections vidéo s'adaptant à la géométrie de l'espace réel, redressant des perspectives et jouant sur des illusions d'optique.
Perma-Cabane est une installation vidéo interactive dans un musée, avec mapping dynamique contrôlé par Kinect (http://www.ogeem.be/doku/doku.php?id=fr:perma_cabane). L'image est produite avec seulement 2 projecteurs vidéo installés de part et d'autre de l'espace.
Cosmic Sensations proposait une projection en dôme d'un système permettant de visualiser les rayons cosmiques de manière créative (http://download.blender.org/documentation/bc2010/cosmicsensation_slides.pdf ). L'image est projetée à une taille de 1000x4000 pixels, grâce à plusieurs projecteurs et à un mapping en dôme.
Blender est également extensible grâce à Python, et peut s'interfacer facilement avec d'autres logiciels, d'image ou de son par exemple. Une méthode courante pour interfacer avec Blender est l'utilisation du protocole OSC (Open Sound Control), sorte de successeur du MIDI, très courant dans les logiciels de travail du son. Ceci permet par exemple de créer un système sonore indépendant du BGE, mais synchronisé avec lui. Ce protocole est également souvent utilisé pour intégrer des contrôleurs externes, et compléter la palette d'interface physique disponible (par exemple Kinect, Wiimote, détection caméra, senseurs avec Arduino, etc.). Dernièrement on a pu voir aussi qu'il était simple d'utiliser le BGE avec les casques de réalité virtuelle de type Oculus Rift.
II-B. Quelques exemples de jeux utilisant le BGE ?▲
Pas convaincu(e) ? Voici des exemples de jeux réalisés avec le Blender Game Engine.
II-B-1. Yo Frankie!▲
Il s'agit d'un jeu vidéo gratuit et libre édité par la Blender Foundation en 2008 dont le personnage principal, Frank, est issu du court-métrage Big Buck Bunny.
URL du projet : http://www.yofrankie.org
II-B-2. Running Guys▲
Un jeu de course/plateforme, gagnant d'un concours de création de jeux vidéo en juin 2014. Il est possible de jouer à deux sur la même machine avec le clavier ou des manettes et de jouer en multijoueur (les serveurs peuvent gérer plusieurs parties en parallèle). Le code et toutes les ressources (images et musiques) sont entièrement libres. Il a été réalisé par seulement deux personnes en deux semaines. Depuis il continue d'être amélioré. Des fonctionnalités et du contenu sont ajoutés tous les mois.
Accessible sur http://rg.osxia.org
II-B-3. Dead Cyborg▲
Un jeu complet d'aventure SF, une histoire à propos du sens de la vie et de la mort. Il est disponible sur le Steam Greenlight.
Accessible sur http://deadcyborg.com
II-B-4. ColorCube▲
ColorCube est un jeu de puzzle/réflexion basé sur le roulement d'un cube et le fait d'attraper et de déposer une face colorée. Le jeu a été entièrement conçu à l'aide de Blender, que ce soit pour la modélisation ou la logique interne, utilisant le moins possible de scripts Python. La toute première version du jeu n'utilisait d'ailleurs que des briques logiques, afin de participer à un concours basé sur ce principe. Après l'enthousiasme encourageant des joueurs testeurs, une version améliorée incluant un éditeur de niveau a été proposée à petit prix, dans l'optique de faire un test de jeu commercial utilisant le BGE. Le jeu a connu un succès raisonnable, principalement au niveau de la communauté Blender.
Développeur : ColorCubeStudio
Genre : puzzle/réflexion 3D
Licence : propriétaire / Démo libre disponible
Prix : 4,50 €
II-C. Pourquoi pas d'autres moteurs de jeu ?▲
Il existe de nombreux moteurs de jeu. Beaucoup d'entre eux sont d'ailleurs libres dont l'un des plus prometteurs pourrait être Godothttp://okamstudio.com/tech/ dont le statut évolue ().
En attendant Godot, ou qu'un autre moteur indépendant se révèle, il est important d'avoir de nombreux critères pour en choisir un. Tout d'abord, le Game Engine est intégré à Blender : si vous connaissez déjà Blender, il sera plus facile de commencer les jeux vidéo avec votre outil préféré ! Si vous ne connaissez pas Blender, avoir un moteur de jeu directement intégré à votre outil de création 3D est clairement un plus : pas besoin de changer d'outil pour tester son jeu, un simple appui sur P permet de lancer le jeu. Cela représente aussi un avantage non négligeable sur les jeux créés en langages compilés.
De plus, vous n'avez pas besoin de savoir coder pour commencer à utiliser le BGE : les briques logiques (Logic Bricks) permettent d'aller assez loin dans la création et l'interactivité du jeu.
À l'inverse, si vous savez coder en Python, vous pourrez accéder à absolument toutes les possibilités du BGE avec votre code, comme c'est le cas dans Blender en général.
Enfin, c'est un moteur de jeu libre, sous licence GPL* : vous avez le droit de l'utiliser sans restrictions, de le partager autour de vous, de l'étudier, et même de le modifier pour l'améliorer !
II-D. Un outil, ça oblige à faire des choix▲
Bien sûr, comme tous les outils, le BGE ne sait pas absolument tout faire. Il possède ses propres spécificités et limites, dont voici les principales. Un outil, ça s'utilise, ça se contourne, et cela a parfois besoin d'adaptation pour fonctionner comme désiré. Libre à vous de contribuer à son amélioration si vous avez des demandes spécifiques !
II-D-1. Jeux en réseau▲
Il est possible de faire des jeux en réseau avec le BGE, mais il n'y a pas de fonction toute prête pour le faire rapidement : il faudra utiliser le langage Python et une bibliothèque dédiée au réseau, donc avoir les compétences nécessaires en programmation. En revanche, avoir plusieurs joueurs sur le même ordinateur est plus accessible, nous l'aborderons dans la section Développer l'ergonomie.
II-D-2. Performances▲
Il y a plus rapide que le Game Engine de Blender, et, malgré des progrès dans ce sens, vous pourrez atteindre des limites de performance plus tôt qu'avec d'autres moteurs. Cela est principalement dû à l'utilisation du langage Python, qui apporte beaucoup d'avantages et de simplicité, mais qui n'est pas conçu pour le cas spécifique des performances dans un environnement 3D.
Cependant, tout jeu doit toujours être pensé en fonction de ces contraintes de calcul et cela a un impact systématique, y compris dès le départ sur la modélisation. Optimiser son jeu dès le début et prendre de bonnes habitudes ici sera utile dans tous les moteurs ! Nous traiterons de ces habitudes à prendre dans tout le livre, et nous aborderons plus particulièrement les techniques dédiées à l'amélioration des performances dans la section Optimisations.
II-D-3. Le Game Engine ne possède pas toutes les fonctions de Blender▲
Le Game Engine est une partie à part de Blender. Le calcul en temps réel réclame d'autres solutions techniques que celles utilisées pour faire du rendu 3D. De ce fait, tout ce que vous savez faire dans Blender ne sera pas forcément possible dans le BGE, à moins de passer par une étape de conversion aux solutions dédiées au « temps réel ». Si votre ambition est de faire des jeux, vous concevrez vos projets directement dans cette optique et bientôt ces contraintes n'apparaîtront plus.
III. Spécificités du Game Engine▲
Blender est une suite graphique 3D complète. Ses usages vont de l'impression 3D aux films à effets spéciaux ou d'animation. Une utilisation pour le Game Engine implique donc des spécificités.
III-A. Adapter son interface▲
L'interface par défaut est adaptée au moteur de rendu Blender Internal destiné à du film d'animation.
Il faut changer Blender Render dans le menu de la barre Info et opter pour le choix Blender Game afin de travailler avec l'interface du moteur de jeu.
Un changement immédiatement visible est la modification de l'onglet Render.
Les panneaux Render et Dimensions (qui permettent de lancer le rendu d'une image à une certaine dimension) ont été remplacés par des panneaux Embedded Player et Standalone Player(destinés à définir l'emplacement, la taille de la fenêtre dans laquelle va s'exécuter le jeu).
Les différentes options de ces nouveaux panneaux seront précisées dans le chapitre Bien préparer son projet, à la fin de cette section.
III-B. Adapter son agencement de fenêtre▲
Nous utilisons prioritairement certaines fenêtres (ou éditeurs) en fonction du type de travail à réaliser. Bien souvent, un utilisateur confirmé aura défini son propre agencement de fenêtre, et Blender permet facilement de faire apparaître une fenêtre ou une autre en fonction des besoins. Néanmoins, Blender propose par défaut un agencement appelé Game Logic. C'est celui-ci que nous préférerons parce qu'il positionne de manière claire les fenêtres les plus importantes lorsque l'on pratique de la création de jeux vidéo.
Ces fenêtres sont (en allant de gauche à droite et de haut en bas):
- Outliner qui nous sert à avoir une vue en liste de nos éléments de jeux ;
- 3D View qui servira entre autres à prévisualiser le jeu ;
- Text Editor où nous écrirons du code Python ;
- Logic Editor où nous assemblerons et éditerons nos briques logiques ;
- Properties bien connues des utilisateurs de Blender.
III-C. Spécificités graphiques▲
Les capacités de l'affichage 3D des ordinateurs ont évolué au cours du temps, ce qui se traduit actuellement par deux méthodes de rendu.
Dans le panneauShading, le choix Multitexture est actif par défaut. Il correspond simplement à la possibilité d'afficher des matériaux utilisant plusieurs textures.
Le choix GLSL est une option plus intéressante graphiquement, car elle permet de nombreux effets avec les éclairages, les matériaux, les effets de texture, et d'autres améliorations graphiques.
La plupart des ordinateurs récents supportent les capacités GLSL. Néanmoins, si vous destinez votre jeu à une large diffusion et que la qualité graphique du jeu est mineure (ou par nécessité d'optimisation), vous pourrez opter pour le choix Multitexture.
III-C-1. Les matériaux▲
L'interface de l'onglet des matériaux dans le Blender Game est dérivée de celle du Blender Render, avec quelques subtilités. Puisque le moteur de rendu Cycles est désormais souvent le premier moteur de rendu appris par un graphiste utilisant Blender, un petit récapitulatif s'impose sur l'onglet Matériaux et ses différents panneaux étant donné que les matériaux et les textures doivent être gérés différemment.
- Comme dans le Blender Render, pour un matériau donné, les panneaux Diffuse, Specular, Shading permettent de définir les paramètres de base du matériau (couleur, intensité, dureté, autoillumination, sensibilité à la lumière ambiante, etc.).
- Les panneaux Mirror et Sub surface Scattering n'existent plus. Ce sont des fonctionnalités non présentes dans le Game Engine. Il sera possible de simuler un miroir avec des techniques avancées, mais ce n'est plus une option de matériau.
-
Le panneau Options permet d'activer des fonctions de colorisation supplémentaires. Malheureusement, quelques-unes de ces options n'ont aucun effet dans le Game Engine (par exemple: Traceable, Full Oversampling, Sky ou encore Invert Z Depth). Par contre d'autres peuvent s'avérer très utiles pour l'optimisation de jeux :
- L'option Object Color correspond à une couleur propre à un objet. Deux objets peuvent utiliser le même matériau, mais avoir une couleur différente définie par cette option.
- Les options Vertex Color Paint et Vertex Color Light correspondent à une collection de couleurs variant selon les vertices d'un maillage. Pour le jeu vidéo, cela sert souvent à colorer, illuminer ou assombrir des parties d'objet, pour améliorer la qualité graphique d'un objet sans alourdir son matériau.
- L'option Face Textures permet à la texture brute de se substituer au résultat de tous les réglages du matériau. Cette option était fort utilisée avant l'arrivée du GLSL afin de s'assurer de l'affichage des textures dans le Game Engine.
- Le panneau Shadow permet de gérer les ombres à partir des matériaux. Ces options doivent être pensées en relation avec les lumières. Certaines options n'ont aucun effet dans le Game Engine comme Receive Transparent ou Shadows Only.
III-C-2. Les particules▲
Les particules des moteurs de rendu Blender Render ou Cycles ne sont pas accessibles dans l'interface Blender Game, car leur physique complexe n'est pas supportée. Par des effets de textures animées, il est possible de générer en temps réel le même genre d'effets créés avec des particules (feu, fumée) ou pourquoi pas en utilisant un générateur automatique d'objets sur lequel nous aurons un chapitre spécifique.
Un add-on appelé Easy Emit permet de gérer la génération de plans texturés, avec une interface semblable à celle du système standard des particules. Voir http://blenderartists.org/forum/showthread.php?241656-easyEmit-*Update*-13-06-2013
III-D. Spécificités et limitations liées à certaines techniques de modélisation et d'animation▲
Pour animer des éléments dans Blender, certains ont peut-être l'habitude d'utiliser des fonctionnalités avancées comme les contraintes d'objet (Object Constraints) pour conserver ou changer les propriétés ou le maillage de leur modèle, pour s'aider dans l'animation de l'une ou l'autre partie de leur personnage ou tout simplement pour lui faire suivre un objet particulier de la scène. Malheureusement, certaines de ces aides et méthodes ne sont pas disponibles dans le Game Engine. Il faudra utiliser des alternatives pour arriver à un résultat identique ou approchant.
Les techniques utilisant les contraintes d'os (Bone constraints) sont heureusement bien supportées, mais ne sont pas toutes disponibles.
Et pour finir, la règle générale pour l'utilisation des modificateurs (modifiers), c'est que seuls les modificateurss'appliquant sur des maillages (mesh) et qui ne dépendent pas d'un facteur temps sont supportés. Quoi qu'il en soit, on préférera appliquer les effets de tous les modificateurs avant la publication du jeu de manière à alléger les calculs autant que possible.
III-D-1. Contraintes d'objet▲
Il est important de savoir que la plupart des contraintes d'objet ne sont pas supportées par le Game Engine. L'unique contrainte d'objet supportée est le Rigid Body Joint, à l'exception du joint de type Ball. La contrainte de type Rigid Body Joint ne fonctionne que pour les objets de type mesh, pour autant que l'objet ait un modèle physique (voir le chapitre Le comportement des objets de notre monde dans la section Comportement des objets et personnages).
Les joints sont créés automatiquement au démarrage du jeu, mais ne peuvent être détruits ou créés au cours du jeu que par une des commandes Python spécialisées.
L'absence de presque toutes les contraintes dans le BGE peut sembler rédhibitoire, mais il est souvent possible de compenser cette perte par diverses techniques :
- utiliser une relation de parent entre objets à la place de la contrainte Copy Location ;
- utiliser la brique logique Edit Object et son option Track To à la place de la contrainte Track To.
En dernier recours, on peut toujours tenter de reproduire l'effet d'une contrainte par du code Python.
III-D-2. Contrainte d'os▲
Pour les armatures, un certain nombre de contraintes d'os (Bone Constraint) sont supportées. En voici la liste exhaustive :
- Track To ;
- Damped Track ;
- Inverse Kinematics ;
- Copy Rotation ;
- Copy Location ;
- Floor ;
- Copy Scale ;
- Locked Track ;
- Stretch To ;
- Clamp To ;
- Transformation ;
- Limit Distance ;
- Copy Transform.
III-D-3. Modificateurs▲
Davantage de modificateurs (modifiers) sont supportés dans le BGE. En premier lieu, le modifier Armature qui permet l'animation par armature d'un objet. Pour le reste, les modifiers qui n'agissent que sur le mesh de l'objet et qui ne dépendent pas du temps sont supportés. Voici une liste de modifiers qui dépendent du temps et donc ne sont pas supportés :
- Build ;
- Displace ;
- Wave ;
- Cloth ;
- Fuild Simulation ;
- Explode ;
- Smoke ;
- Mesh Cache.
En cas d'hésitation, le plus simple est de tester directement dans le BGE si un modifier est supporté avec le Standalone Player. En général, l'effet du modifier est supporté, mais pas son animation.
Toutes ces remarques sur les modifiers ne valent que pour ceux non appliqués avant le lancement du jeu. L'application d'un modificateur (en appuyant sur le bouton Apply) transforme de manière permanente le maillage de l'objet (le modifier disparaît d'ailleurs de l'interface). Et donc la question du support de ce modifier dans le BGE ne se pose plus, puisque le maillage a subi des transformations irréversibles et maintenant visibles dans le Game Engine.
Si vous avez l'habitude d'animer directement un modifier (en ajoutant des clés d'animation sur ses paramètres) ou indirectement (par le biais de l'animation d'un objet référence ou de celles de weight groups), la parade à adopter sera d'appliquer le modifier en tant que ShapeKey (avec le boutonApply as Shape Key). Le BGE supporte les animations de ShapeKeys.
L'utilisation de modifiers dans le jeu ne se justifie que pendant la phase de développement. Une fois en production, il est généralement préférable d'appliquer le modifier pour améliorer les performances à l'exception de l'armature.
III-E. Pas de gaspillage de ressources▲
Sans rentrer dans des détails qui seront approfondis plus tard, il faut retenir que l'optimisation est au cœur de la conception d'application en temps réel. Voici quelques points de repères et de bonnes pratiques.
- Un jeu vidéo est considéré comme parfaitement fluide s'il est capable d'afficher environ 60 images par seconde. En dessous de 50, le jeu commence à sembler saccadé, mais reste utilisable. En dessous de 25 images par seconde, l'illusion de mouvement ne fonctionne plus, et l'expérience ludique est fortement dégradée.
- Il est important de limiter le nombre de faces de chaque objet. De nombreux facteurs entrent en compte, mais disons qu'il est déraisonnable de dépasser quelques milliers de triangles pour un objet important, et quelques centaines pour un objet secondaire.
- Attention, Blender indique le nombre de faces, pas le nombre de triangles. Dans la majorité des cas, il faut donc multiplier par deux le nombre indiqué.
- Pour des raisons techniques liées à la rapidité d'affichage en jeu, les textures devraient toutes respecter une règle simple : être des images carrées dont le côté est une puissance de 2. C'est-à-dire 128x128 pixels, ou 256x256 pixels, 512x512 pixels et ainsi de suite. Les formats préconisés sont le PNG et le TGA.
- Gardez à l'esprit que vos futurs joueurs ne disposent pas forcément d'un ordinateur très puissant ou d'un système très performant. De manière générale, optimisez, même si ça fonctionne bien sur votre machine. De plus, testez votre jeu sur la machine la moins puissante que vous pourrez trouver, ou celle que vous aurez définie comme « configuration minimum ».
III-F. Conclusion▲
Le fait de produire une création qui sera vue en temps réel, et donc constamment calculée pour le rendu, a un impact sur différents aspects de la création 3D tant du point de vue de la modélisation, de la texture ou de l'animation que du rendu global des éléments du jeu. Cela peut être déroutant pour une personne ayant l'habitude des modes Blender Render ou Cycles. Mais comme dans tout acte créatif, ses limitations sont non seulement imposées par le médium (le temps réel, les capacités du Game Engine et les capacités de l'ordinateur qui le fait tourner), mais elles peuvent aussi être vues comme autant de défis créatifs à relever ou à contourner.
IV. Notions de Game Design▲
Un jeu est un tout. Un jeu c'est à la fois une histoire, des personnages, des ressources graphiques, une logique, des énigmes. Un jeu c'est aussi une ambiance sonore, un univers et différents moyens pour le joueur d'agir. Le game design : c'est l'art de prendre les bonnes décisions concernant votre jeu. Faire du game design : c'est prendre des dizaines de petites décisions, décisions qui en s'ajoutant les unes aux autres donneront corps à votre jeu. Votre interface graphique doit-elle afficher les points de vie de votre personnage ? Allez-vous choisir une vue à la première ou à la troisième personne ? La musique sera-t-elle présente tout au long de votre jeu ou ne se fera-t-elle entendre qu'en annonce de passage bien précis ?
Toutes ces questions sont des questions de game design. Y répondre vous fera prendre vos premières décisions de game designer. Décider de faire un jeu est en soit une réponse à la première et l'une des plus importantes questions : Est-ce que je veux faire un jeu ? Félicitations donc, vous venez de devenir game designer. Le chemin qui amène le game designer vers la fin de son jeu est long (mais la voie est libre). Afin de vous aider à le suivre jusqu'au bout en évitant le plus possible les embûches, nous allons voir ensemble quelques notions importantes.
IV-A. Qu'est-ce qu'un jeu ?▲
Cela peut paraître trivial de poser cette question ici. Nous savons tous ce qu'est un jeu. Un jeu, c'est quelque chose auquel on joue. Mais encore ? Ne pourrait-on pas définir les choses plus précisément ? Ne pourrait-on donc pas ensuite utiliser cette définition du jeu pour pouvoir en tirer les règles qui nous permettraient immédiatement de définir ce qu'est un bon jeu ? Et donc, par réciprocité, de définir un mauvais jeu ? Ce qui nous permettrait d'être sûrs de pouvoir toujours faire un bon jeu. Nous allons voir qu'il y a plusieurs définitions d'un jeu. Par contre, il n'y a malheureusement pas de règles magiques pour savoir si un jeu est bon ou pas. C'est bien malheureux, mais c'est aussi cette difficulté qui donne son intérêt à la création de jeux vidéo.
Il y a cependant quelques critères qui nous permettent d'analyser si un jeu est bon. Cette petite théorie « Toy, Immersive, Goal » a été introduite par Carsten Wartmann et Michael Kauppi dans le livre The Blender GameKit (Licence Creative Commons Attribution 3.0). À divers degrés, un jeu doit remplir plus ou moins les critères suivants.
L'aspect jouet (Toy) : ce critère reflète le plaisir immédiat que l'on a à jouer. Pas besoin de réfléchir trop, on commence à jouer comme on le faisait quand on était enfant. Pas besoin de lire le manuel, on sait intuitivement comment s'amuser. Cela ne veut pas dire que ces jeux ne peuvent pas devenir difficiles à jouer et qu'il ne faudra pas un certain degré de compétences pour arriver au bout, mais on a un plaisir immédiat à y jouer.
L'aspect immersif (Immersive) : ce critère reflète à quel degré vous oubliez que vous êtes en train de jouer à un jeu, ce qui a aussi été appelé la « suspension de l'incrédulité ». Cela vient peut-être du fait que les jeux sont si réalistes que l'on se croit dans la réalité, mais aussi parce que l'univers est si riche, si cohérent et consistant que l'on y croit complètement, et que l'on se croit dans le monde du jeu. Bien sûr, le joueur sait toujours qu'il joue, mais jusqu'à un certain point, il va se projeter dans le monde du jeu. Par exemple, un phénomène assez fréquent quand on joue est de perdre la notion du temps, parce qu'on se met mentalement au rythme du jeu.
L'aspect objectif (Goal) : ce critère reflète à quel point le jeu vous emmène vers l'accomplissement d'un objectif, d'un but à atteindre, en passant par un certain nombre d'étapes plus ou moins difficiles et complexes. Le fait d'avoir un objectif peut être lié au scénario, ou simplement être l'aboutissement du principe de jeu (finir la course). Il peut y avoir plusieurs objectifs, et ceux-ci construisent la motivation du joueur à aller au bout.
Un bon jeu aura donc atteint un équilibre entre ces trois aspects, en fonction de ce qu'il est. Idéalement les trois aspects seront très présents, mais vous devrez probablement sacrifier pourtant un peu de l'un pour en renforcer un autre. Par exemple, plus les objectifs sont complexes et la stratégie élaborée, plus il est difficile de conserver l'aspect jouet, mais ça ne veut pas dire que cet aspect doit être complètement absent.
IV-A-1. Mais alors, qu'est-ce qu'un jeu ?▲
Beaucoup de game designers se sont essayés à donner une définition. Nous allons en citer deux. Pour George Santayana, « Jouer est tout ce qui se fait spontanément et pour le simple plaisir de jouer ». Tracy Fullerton définit un jeu comme « un système formel, fermé, qui engage les joueurs dans un conflit structuré, et se termine dans une issue inégale ». Nous pourrions en donner d'autres. Vous pourriez essayer de trouver votre propre définition. Il y a en fait quasiment autant de définitions du mot jeu que de personnes essayant d'en donner une. Il y a pourtant des points communs. On retrouve très souvent les notions de conflit au sens large, de plaisir, d'initiative personnelle et de résolution de problèmes. Gardez ces points à l'esprit lorsque vous allez créer votre jeu et tenez-en compte lorsque vous prenez des décisions.
Article en français Wikipédia sur George Santayana : http://fr.wikipedia.org/wiki/George_Santayana.
Article Wikipédia en anglais sur Tracy Fullterton : http://en.wikipedia.org/wiki/Tracy_Fullerton.
IV-B. Qu'est-ce qu'un joueur ?▲
Nous avons beaucoup parlé du jeu. Mais un jeu sans joueur n'est pas vraiment un jeu. Il faut qu'on joue à un jeu pour qu'il prenne vie. Bien entendu, chaque créateur de jeu voudra que son jeu plaise à toutes et tous, ou au moins au plus grand nombre. Pourtant faire un jeu qui plaira à tous revient souvent à réduire les originalités de son jeu pour en faire quelque chose de plus lisse et donc souvent plus fade.
En fait, on classifie souvent les joueurs en groupe. Les classifications changent en fonction du type de jeu que l'on adresse. Vous allez par exemple trouver la classification de Richard Bartle qui s'axe plus sur les joueurs de MMORPG ou de jeux de rôles. Elle permet de définir que des joueurs sont plus intéressés par l'axe d'exploration du monde des jeux auxquels ils jouent tandis que d'autres préféreront suivre l'histoire et en découvrir toutes les ramifications. Dans un autre domaine, Amy Jo Kim a, quant à elle, défini une taxonomie des joueurs de jeux ayant une composante sociale. On voit alors que plusieurs groupes se détachent, certains joueurs étant très réceptifs à la compétition, d'autres préférant largement les systèmes de collaboration entre joueurs.
Nous avons parlé du jeu en lui-même ainsi que des joueurs. Il nous reste une dernière chose à voir avant de passer aux éléments constitutifs des jeux eux-mêmes, c'est l'expérience de jeu.
Article Wikipédia en anglais sur Richard Bartle :
http://en.wikipedia.org/wiki/Richard_Bartle
Article Wikipédia en anglais sur Amy Jo Kim :
http://en.wikipedia.org/wiki/Amy_Jo_Kim
IV-C. Qu'est-ce qu'une expérience de jeu ?▲
L'expérience de jeu est ce qui naît de la rencontre entre le joueur et le jeu. Créer une expérience de jeu est le but ultime de votre jeu. C'est la finalité de celui-ci. L'expérience utilisateur va regrouper tout ce que ressent votre joueur. Normalement, en jouant à votre jeu, il va éprouver des sentiments. Il pourra éprouver de la joie, de la peur, de la tristesse. Il pourra éprouver de la colère ou un peu de frustration. Toutes ces émotions seront créées par son interaction avec votre monde. Toutes ces émotions sont intéressantes et vous devez rechercher la mise en place de ces émotions. La seule chose que votre joueur ne devrait pas ressentir est l'ennui.
Lorsque vous concevez votre jeu, n'oubliez pas que le but final de ce dernier est de faire vivre une expérience à ses joueurs. L'une des premières décisions que vous allez avoir à prendre sera donc de définir l'expérience que vous allez vouloir offrir. Est-ce que vous allez vouloir mettre en place un survival horror où les joueurs auront la peur de leur vie à chaque déplacement ? Est-ce qu'au contraire vous allez vouloir leur proposer un univers onirique et mignon plein de couleurs et de bons sentiments ?
Toutes vos décisions futures doivent renforcer la construction de l'expérience que vous voulez proposer. Un zombie en état de décomposition avancée sera parfait pour un survival horror, bien qu'un peu classique. Un joli lapin souriant, lui, ira bien dans un univers mignon et coloré, mais pas vraiment pour votre survival horror. À moins qu'il soit en train de se faire dévorer par le zombie !
Maintenant que nous avons vu ces trois notions importantes, mais très théoriques, nous allons nous attacher à détailler quelques composants importants des jeux.
IV-D. Découpage temporel d'un jeu▲
On découpe généralement le temps passé à jouer à un jeu en trois parties.
IV-D-1. L'onboarding ▲
Au début d'un jeu, on retrouve ce que l'on appelle l'onboarding. L'embarquement est une assez bonne traduction. C'est en effet la partie où votre joueur va découvrir votre jeu. C'est pendant ce laps de temps qu'il va décider si cela vaut le coup de continuer ou pas. Si votre jeu va réussir à l'embarquer dans son monde.
Une méthode d'embarquement classique est de commencer le jeu par un tutoriel. Votre joueur peut alors se familiariser avec la manière de jouer, les possibilités de son personnage, etc. L'important ici est de proposer une découverte progressive des possibilités que votre joueur aura. Cela peut aussi passer par des systèmes d'énigmes simples à résoudre qui mettent, chacune, en lumière, une des possibilités du jeu. Dans Plants VS Zombies (un jeu de tower defense où vous devez protéger votre maison d'une invasion de zombies en plantant des végétaux qui les détruiront), les premiers niveaux ne sont là que pour introduire une par une les nouvelles plantes. Lorsque vous avez vu toute la palette possible des unités végétales, alors le jeu démarre réellement.
Les mécanismes de mise en place de la découverte d'un jeu sont vraiment multiples. Ne vous laissez pas limiter par ce dont vous avez l'habitude et innovez. Dans Bastion par exemple, la découverte du jeu est mise en place par une voix off qui va proposer au joueur de tester différents mécanismes. Il lui suffit de se laisser guider. C'est une manière de faire très astucieuse qui permet de réduire un peu l'artificialité que certains joueurs reprochent aux mécanismes d'onboarding. Certains ont pour parti pris de ne pas du tout mettre en place d'onboarding. Le joueur est alors directement catapulté dans le vrai jeu et doit tout découvrir seul, par mécanisme d'essai et d'erreur. Un certain nombre de joueurs sont très friands de cela. Pour d'autres, c'est au contraire déroutant. À vous de faire les choix en conscience.
IV-D-2. Le corps du jeu▲
C'est la partie la plus longue du jeu. Le joueur va vivre l'expérience que vous proposez en parcourant votre jeu. Peu à peu, il progressera dans sa compréhension et dans les mécanismes, et il deviendra de plus en plus habile à résoudre les conflits et les énigmes que vous lui proposerez.
Il vous faudra donc doser les choses avec doigté. La difficulté de votre jeu doit accompagner la montée en compétences de votre joueur. Si la difficulté ne croit pas assez vite, votre joueur s'ennuiera. Et rappelez-vous, l'ennui est la seule chose que vous ne voulez pas que votre joueur ressente. Par contre, si vous corsez les choses trop rapidement, votre joueur ressentira très rapidement de la frustration. Et, autant ressentir une légère frustration est important, — c'est l'aiguillon qui pousse en avant beaucoup de joueurs — autant ressentir trop de frustration sera vécu comme une injustice par votre joueur qui ne comprendra par la raison de cet acharnement. Et cela pourrait bien l'arrêter de jouer à votre jeu.
IV-D-3. La fin de votre jeu▲
Ici, les choses sont vraiment très différentes en fonction du type de jeu que vous souhaitez mettre en place. Un jeu avec une fin définie et connue (comme arriver à la fin de tous les niveaux d'un puzzle game ou libérer le prince qui s'est bêtement fait kidnapper par une sorcière) possède une fin en soi.
Il y a toutefois des jeux qui n'ont pas de fin. C'est par exemple le cas des jeux en ligne multijoueurs ou d'un jeu qui peut se reparcourir de multiples fois. Dans tous les cas, la problématique est la même. Le joueur a atteint un niveau de compétences suffisant pour arriver au bout du jeu où son personnage a atteint le maximum de l'évolution proposée par le système. Il faut lui donner une raison de ne pas passer à un autre jeu. Il faut donc lui offrir de nouveaux challenges. Soit du nouveau contenu à explorer, soit la possibilité d'entrer en compétition avec les autres ou lui-même. Pourra-t-il refaire le jeu en moins de dix minutes ? Pourra-t-il le faire sans perdre une seule vie ? Pourra-t-il trouver une autre fin plus satisfaisante pour lui à l'histoire que lui raconte votre jeu ? Ce sont des ressorts possibles. À vous de trouver ceux qui correspondront bien à votre jeu pour donner envie à votre joueur de le relancer.
IV-D-4. Interface entre le jeu et le joueur▲
On réduit souvent l'interface entre le jeu et le joueur à l'interface graphique. Mais, l'interface graphique est loin d'être la seule interface que le joueur aura avec le jeu. En effet, pour jouer à votre jeu, votre joueur va devoir agir sur celui-ci. Et en réponse aux actions du joueur, le jeu va devoir réagir et faire connaître au joueur quel est le nouvel état global du jeu. De même vous pouvez choisir d'informer votre joueur de la valeur de certaines données relatives au personnage de votre joueur, au monde de votre jeu, etc. C'est tout cela que représente l'interface du jeu.
En réfléchissant sur l'interface de votre jeu, vous allez vous rendre compte que c'est un point central dans la construction de l'expérience de votre joueur. Imaginons que vous conceviez un jeu qui va proposer des quêtes, allez-vous afficher sur une carte les lieux où il pourra les résoudre ou allez-vous simplement mettre à disposition un journal des quêtes décrivant les choses et les lieux et en lui laissant la charge de les trouver ? Si le personnage de votre joueur a des points de vie, allez-vous lui donner une indication précise numérique ou allez-vous, alors, le laisser dans le flou en ajoutant simplement un filtre rouge sang se fonçant selon la gravité des blessures reçues ? Si vous développez un jeu de tir, allez-vous afficher un réticule de visée ou pas ? Allez-vous auréoler les obstacles d'une couleur permettant aux joueurs de savoir s'ils sont surmontables ou allez-vous le laisser dans l'inconnu ?
Réfléchir sur l'interface entre votre jeu et votre joueur est donc un point important qui est bien souvent malheureusement négligé et qui est donc la source de beaucoup de frustrations inutiles. Combien de fois dit-on d'un jeu que bien qu'il soit excellent, l'interface graphique est tellement mal conçue qu'elle détruit tout le plaisir du jeu ? Enfin, n'oubliez pas que la partie visuelle n'est pas la seule interface possible. Périphérique à retour de force ou ambiance sonore sont des interfaces possibles. Des jeux entiers reposent sur le fait que les sons entendus par le joueur lui donnent des informations vitales pour sa progression.
IV-E. Objectifs dans le jeu▲
Pourquoi les joueurs jouent-ils à des jeux ? Ou plutôt pourquoi continuent-ils à jouer une fois la phase de découverte passée ? Pour finir le jeu, bien entendu. Mais pourquoi est-ce que ce besoin de finir le jeu se fait-il sentir ? Parce qu'un jeu bien construit défie le joueur. Il lui propose des objectifs à remplir. Vous devez trouver le trésor, récolter des pièces d'or ou tout simplement comprendre ce qui se passe. Comprendre pourquoi la situation de départ du jeu était ce qu'elle était.
Mais il ne suffit pas à un jeu d'avoir des objectifs pour être prenant. Il faut que les objectifs soient motivants pour le joueur. Un facteur de motivation important est de mettre en place des objectifs qui ont une valeur endogène à votre jeu, ou qui sont reliés à des objets ayant une valeur endogène. Par endogène on veut dire que l'objectif ou les objets ont une valeur en eux-mêmes dans le jeu. Cela peut-être de trouver les quinze pièces d'or cachées pour atteindre un niveau secret par exemple. En général, on reconnaît un bon objectif au fait qu'il a plusieurs caractéristiques.
Un bon objectif sera concret, atteignable et gratifiant. La gratification se manifeste de différentes manières, mais elle doit exister. Cela peut être un bonus de point, un nouveau niveau, un gain d'objet ou tout simplement le gain d'un accomplissement dans son profil (on parlera d'achievement).
Enfin un objectif doit être clair. Mais attention, clair ne veut pas forcément dire qu'il doit être défini explicitement par le jeu. De même, il n'est pas inintéressant de fournir des objectifs de plusieurs niveaux. Cela permet au joueur de choisir s'il se contente de valider les objectifs principaux ou s'il tente de tous les remplir. Un bon exemple d'un tel mécanisme d'objectif est présent dans le jeu Limbo. Lorsqu'on y joue, l'objectif principal est de comprendre, comprendre la situation initiale du personnage et ce qui se passe. Cela implique de finir le jeu. Au cours du parcours, s'il explore un peu, le joueur peut trouver un œuf. S'il l'écrase, il gagnera automatiquement un accomplissement. Cela crée automatiquement un nouvel objectif, secondaire, récolter tous les œufs. L'objectif en lui-même est parfaitement clair. On écrase un œuf, on gagne un accomplissement. Mais il a tout de même fallu que le joueur le découvre par lui-même. La découverte d'objectifs cachés devient en elle-même un objectif qui peut-être un puissant moteur pour le joueur.
IV-F. Équilibrage▲
On va pouvoir équilibrer plusieurs choses dans un jeu. On peut toutefois regrouper le tout en deux grands ensembles, l'équilibrage joueur contre joueur et l'équilibrage du jeu.
IV-F-1. Équilibrage joueur contre joueur▲
On va ici pouvoir à nouveau découper en deux ensembles différents, à savoir, si l'on a des systèmes symétriques ou des systèmes asymétriques.
IV-F-1-a. Système de jeux symétriques▲
Le jeu d'échecs est par exemple un système symétrique. Tout comme la plupart des sports, chaque joueur possède les mêmes possibilités. Dans le jeu vidéo, on pourra citer des jeux tels que Towerfall ou Samourai Gunn. Il n'y a là du coup rien à équilibrer vu que les possibilités sont exactement identiques. On n'équilibre pas les pions blancs comparés aux pions noirs aux échecs. Il s'agit alors de pouvoir proposer des solutions pour équilibrer des différences importantes de compétence de jeu entre plusieurs joueurs. On ne peut le faire qu'en donnant des bonus aux joueurs les plus faibles ou en infligeant des handicaps aux plus puissants. Dans Towerfall par exemple, le joueur le plus faible se voit automatiquement offrir des bonus en début de partie.
IV-F-1-b. Système de jeux asymétriques▲
Beaucoup de jeux proposent un fonctionnement différent basé sur des façons de jouer asymétriques. On peut citer tous les jeux de type 0 A.D., Warcraft ou Starcraft qui proposeront plusieurs races jouables différentes. Cela peut également être des jeux tels que Nexuiz ou Xonotic. Ici, ce sont les armes qu'il faudra équilibrer pour être sûr que, dans une même catégorie, il n'y a pas d'arme plus puissante qu'une autre et qu'il n'y a pas non plus d'arme ultime dont l'utilisation donnerait un avantage irrémédiable à un joueur. On doit aussi par exemple équilibrer les capacités des différents karts disponibles dans SuperTuxKarts.
Comment réussir à équilibrer des choses asymétriques ? C'est en effet un exercice assez difficile. La solution la plus sûre consiste à mettre en place des systèmes de notation. Il vous faudra définir les caractéristiques importantes du système qui permet d'évaluer l'équilibre. Pour une arme cela pourra être ses dégâts, son temps de rechargement, sa précision, sa portée et le temps entre deux tirs. Une fois votre grille de notation prête, il vous faudra noter chaque objet à équilibrer. Une fois cela fait, vous n'avez plus qu'à vérifier que les moyennes de tous vos objets sont à peu près équivalentes.
IV-F-2. Équilibrage du monde.▲
On va retrouver, encore une fois, deux grandes catégories dans ce que nous appelons équilibrage du monde. Nous allons commencer avec l'équilibrage de la difficulté et nous finirons avec celui des choix.
IV-F-2-a. Équilibrage de la difficulté▲
On l'a vu au début de ce chapitre, pendant tout le corps du jeu, il faut augmenter petit à petit la difficulté des challenges qui seront proposés aux joueurs. C'est l'équilibre entre réussite et frustration, difficulté et plaisir qui fera que les joueurs continueront à jouer. Mais comment doser cette difficulté ? Comment savoir quel levier augmenter ?
Là aussi, la méthode la plus sûre pour y arriver est celle de la notation « multicritère ». Imaginons que vous créiez un jeu d'escarmouche. Votre joueur va devoir se battre contre des équipes ennemies. Il va vous falloir doser la puissance des équipes en question. Une façon simple est alors de définir une note pour chaque créature pouvant composer l'équipe. Pour construire des challenges plus difficiles et donc des équipes plus fortes, il vous suffira de vous autoriser à chaque fois un peu plus de points pour la construction d'une équipe. La première équipe que le joueur affrontera devra coûter moins de douze points tandis que la dernière pourra dépasser les deux cents.
On peut avoir des jeux faisant intervenir des opposants non joueurs. Cela peut par exemple être un jeu de karting où il va vous falloir modéliser le comportement des concurrents et simuler une courbe de progression de ces compétiteurs artificiels pour que le joueur ait toujours une concurrence à peu près à son niveau. Ici, l'astuce est de faire comme lorsque deux joueurs de niveau différents s'affrontent en sport, mettre en place des handicaps pour les bots, handicaps qui seront très importants au départ et qu'il faudra alléger au fur et à mesure.
IV-F-2-b. Équilibrage des choix▲
Un jeu est une succession de choix. Mais pour être intéressants, pour être stimulants, il faut que les choix soient utiles et impactants. Noyer le joueur sous une avalanche de choix n'ayant aucun poids sur le déroulement du jeu ou de l'histoire est totalement inutile, voire contre-productif. Après tout, si c'est pour être passif devant un écran sans avoir de réelle possibilité d'intervention, la plupart de vos joueurs préféreront aller regarder un bon film. The walking dead, le jeu saison 1, est un bon exemple de cela. Les choix que l'on vous proposera auront un impact direct et immédiat. Dans The walking dead, vous vous retrouverez parfois à choisir qui va survivre et donc qui va mourir entre deux des personnages que vous côtoyez.
Une pratique intéressante lorsque l'on construit des choix est de tenter d'aller plus loin que le simple choix binaire, et de proposer des choix jouant sur une ambivalence : risque limité avec petite récompense, gros risque lié à grosse récompense. Allez-vous prendre le chemin de droite beaucoup plus rapide, mais vous permettant de collecter moins de pièces ou celui de gauche qui vous fera faire un détour, mais vous permettra de faire le plein de trésors ? Un bon conseil à propos de la mise en place de choix est de toujours essayer d'éliminer le concept de bon et de mauvais choix.
Il nous reste maintenant une dernière chose à voir dans cette courte introduction au game design, les récompenses et leur pendant, les punitions.
IV-G. Récompenses et punitions▲
Les jeux sont des systèmes visant à résoudre des conflits, des énigmes. Mais qui dit résolution, dit gain, récompenses. Un joueur qui réussit une épreuve s'attend en effet à être récompensé. Bien entendu, vous pouvez totalement prendre ce principe à contre-pied et proposer un jeu n'ayant pas de récompense. Mais si vous décidez d'intégrer le fait qu'une résolution réussie offre une récompense, il faudra alors vous pencher sur la mise en place ou pas d'un système de punitions en cas d'échec.
Mais pourquoi voudriez-vous mettre en place un système de punitions ? Là encore, ce n'est pas une obligation et de nombreux joueurs n'apprécient pas du tout d'être punis par leur jeu. Mais la punition dans un jeu vidéo est toutefois un ressort important. Du simple fait de sa présence, elle augmente mécaniquement la valeur que vos joueurs vont accorder aux récompenses que vous leur offrez. S'ils savent qu'un échec peut leur valoir de perdre le magnifique objet qu'ils viennent de gagner, le challenge n'en devient que plus important. Les décisions que vous leur demanderez de prendre deviendront des décisions importantes, dont ils pèseront vraiment l'impact. Mieux encore, l'échec peut alors devenir mémorable et générer un vrai souvenir dont on reparle ensuite entre joueurs.
Il n'y a bien entendu pas que la punition par perte d'objet ou de ressource qui soit possible. Dans certains cas, on peut imaginer ce qu'on appelle la mort véritable, en clair : le jeu est fini. Il faut tout recommencer depuis le début. On peut aussi voir la punition comme un ressort presque comique. Si l'on reprend Bastion comme exemple, la voix off lorsque vous échouez une action d'une manière vraiment importante se moque de vous. L'effet est garanti.
Ce dernier point sur les récompenses et les punitions clôt donc cette présentation de ce que l'on appelle le Game Design. Il y aurait encore beaucoup à dire sur le sujet et si vous souhaitez creuser les choses, ce n'est pas la littérature qui manque. Vous en savez toutefois maintenant largement assez pour pouvoir imaginer et construire votre jeu. Et n'oubliez pas, pour être un game designer, il suffit de créer un jeu. Alors, n'attendez plus, tournez la page, apprenez à mettre en place votre environnement Blender Game Engine et créez !
V. Bien préparer son projet▲
Créer un jeu basique ne pose pas de soucis d'organisation, mais dès que notre projet va grandir, nous aurons des images et des sons qui y seront associés, des fichiers textes contenant le code, etc.
Une bonne pratique est de se préparer dès le départ et de travailler de façon méthodique. Cela nous permettra d'éviter et/ou de corriger des erreurs plus facilement.
Il appartient à chacun de définir l'organisation optimale pour son travail, mais nous vous proposons ici les éléments qui nous semblent les plus importants. Seul le premier point est indispensable pour démarrer avec le Blender Game Engine (BGE).
V-A. Changer le mode utilisé▲
Blender est par défaut réglé pour faire du rendu avec son moteur de rendu interne (Blender Render), mais nous voulons faire du jeu, donc nous allons changer le mode de Blender.
Ce changement s'opère en haut à droite de Blender, choisissons Blender Game.
Nous choisirons aussi, dans le panneau dédié, le shadingGLSL dans l'onglet Render pour nous offrir plus de possibilités et de réalisme dans l'affichage en temps réel.
Remarquons également que l'onglet Render a sensiblement changé depuis la sélection du mode Blender Game. C'est ici que se trouvent les configurations du BGE. Nous pouvons déjà lancer le moteur de jeu en positionnant la souris au-dessus de la vue 3D en appuyant sur P, même si pour l'instant rien ne se passe. Échap ou Esc est la touche par défaut pour fermer le mode interactif et retrouver les fonctions d'édition de Blender.
Nous avons alors deux options de rendu qui sont placées dans des onglets séparés :
- le Embedded Player (lecteur intégré) permet de lancer le moteur dans Blender directement (comme P dans la vue 3D) ;
- le Standalone Player (lecteur autonome) permet de lancer le jeu dans une fenêtre séparée avec davantage d'options (résolution précise, plein écran, l'antialiasing). Le jeu, une fois exporté en exécutable indépendant se comportera au plus proche de l'aperçu obtenu dans ce mode (il ne faudra pas oublier d'empaqueter les ressources avant, nous l'aborderons dans la section Créer son premier jeu, chapitre Partager son jeu).
Attention, il faut toujours sauvegarder le .blend avant de lancer le jeu. Pendant sa conception, un jeu plante très souvent et sans sauvegarde au préalable, le travail serait perdu.
V-B. Blender sur plusieurs moniteurs▲
Si vous avez la possibilité d'utiliser plusieurs écrans, il peut être assez confortable de dédier votre second moniteur à la vue 3D, et au test de votre jeu, pour profiter de tout l'espace disponible sur l'écran principal pour le réglage des briques logiques et l'écriture du code (ou tout l'inverse !).
Pour cela, il faut ouvrir une nouvelle fenêtre à l'intérieur de Blender.
Au lieu d'attraper (cliquer-glisser) l'angle supérieur droit ou inférieur gauche d'un éditeur (les trois traits diagonaux) pour le séparer en deux, ou le joindre à un autre, il suffit d'appuyer sur Maj et de la maintenir appuyée avant de cliquer-glisser sur cet angle. Blender détache alors une nouvelle fenêtre avec le même éditeur, par exemple la vue 3D, que vous pouvez placer sur un autre écran.
V-C. Créer un répertoire pour contenir notre projet▲
Fondamentalement, la première bonne habitude à prendre pour le projet lui-même est d'organiser ses ressources dans un dossier propre au jeu (avec différents sous-dossiers pour les images, les sons, etc.). Cela facilitera la recherche des fichiers et simplifiera l'importation des éléments dans Blender par la suite.
V-D. Réglage de l'environnement de développement Python▲
Votre jeu, s'il est un peu évolué, contiendra certainement des scripts Python. Il serait en effet fastidieux de vouloir utiliser systématiquement les outils graphiques de Blender : s'obstiner à tout définir en briques logiques peut s'avérer contre-productif. Les outils graphiques mettent à disposition des options courantes, et passé les premiers temps vous pourrez vous sentir contraints.
V-E. Les scripts Python▲
Les jeux dans Blender se programment en Python. C'est un langage largement utilisé dans les applications graphiques puisqu'il est aussi utilisé par exemple dans Gimp, Inkscape ou Scribus. Il représente donc un bon investissement pour de nombreuses personnes, y compris celles venant du monde de la création visuelle.
Pour enregistrer notre code, deux options s'offrent à nous :
- utiliser l'éditeur de texte interne de Blender : Les scripts seront enregistrés directement dans le .blend. Cette méthode est la moins compliquée, mais n'offre pas autant de malléabilité ni de sécurité : Par exemple, si Blender (ou le moteur) plante et que le .blend n'a pas été sauvegardé, les scripts (et autres données) seront perdus. En affichage Blender Game, l'éditeur de texte est directement disponible dans l'écran de travail Scripting. On pourra ainsi en créer autant que nécessaire. Il suffit alors de cliquer sur le bouton New pour créer un nouveau texte. Pour rendre le texte plus agréable à lire et plus compréhensible pour la programmation, il est possible d'activer la coloration syntaxique et la numération des lignes via deux des trois boutons dédiés dans le header de l'éditeur de texte (juste à gauche de Run Script) ;
- utiliser un éditeur de texte (ou plutôt de code) externe : en cas de plantage imprévu de Blender, les dernières modifications sur les scripts ne seront pas perdues. Cela facilite aussi le travail avec des collaborateurs qui peuvent alors utiliser leur outil d'écriture favori. En revanche, il faut placer les scripts et packages dans le même répertoire que celui du .blend. Si nous empaquetons le jeu (pour l'exporter par exemple), les scripts ne seront pas ajoutés dans le .blend (contrairement aux images et sons). Il faudra donc les ajouter à la main en les ouvrant depuis l'éditeur de texte de Blender.
V-E-1. La console▲
Pour le développement (en Python), la console sera notre outil indispensable. Elle permet de faire apparaître les messages au fur et à mesure du jeu : les messages d'erreurs, ceux sur l'évolution d'une action ou d'une variable. Ces informations seront utiles pour déboguer et essayer de résoudre les problèmes éventuels. Certains éditeurs Python intègrent des consoles et on pourrait imaginer lancer Blender à partir d'eux. Certains terminaux comme Quake permettent un coup d'œil rapide, voire, si vous utilisez une console standard, de la configurer pour qu'elle reste au premier plan.
V-E-1-a. Sous Windows▲
Si vous utilisez Blender sous Windows, dans le menu, nous choisissons Window > Toggle System Console.
Et une belle fenêtre apparaît.
V-E-1-b. Sous Linux▲
Sous Linux, il y a deux manières d'installer Blender et donc deux manières de le lancer. Vous pouvez l'installer en utilisant votre gestionnaire de paquet. C'est la façon la plus simple et la plus rapide. Il faut toutefois faire attention, suivant la distribution que vous utilisez, la version de Blender que vous installerez pourra être plus ou moins vieille. Une fois Blender installé, il vous suffit de lancer une console et de simplement taper la commande blender suivie d'un appui sur la touche Entrée.
Vous pouvez aussi décider de télécharger une archive de la dernière version de Blender et de la décompresser quelque part sur votre disque dur. Une fois Blender installé de cette façon, il faudra pour le lancer que vous ouvriez une console, que vous alliez dans le répertoire contenant Blender (avec la commande cd) et que vous tapiez la commande ./blender suivie d'un appui sur Entrée.
V-E-1-c. Sous Mac▲
Sous Mac, pour démarrer Blender en mode console, vous devrez démarrer un terminal et lancer Blender en ligne de commande. A priori, nous considérons que Blender est installé dans vos Applications.
L'application Terminal (c'est la console de Mac) se trouve dans le dossier Utilitaires. Lancez-la. Dans le terminal, écrire la ligne suivante et ensuite appuyer sur Entrée pour démarrer Blender
/Applications/Blender/blender.app/Contents/MacOS/blender
Si cette commande ne fonctionne pas, vérifiez le chemin vers votre application Blender. En fonction de votre version ou de la façon dont vous avez installé Blender, le chemin pourrait être différent. Faites bien attention à la casse (majuscules et minuscules) également.
V-E-2. Gérer les ressources externes, modification du répertoire courant en Python▲
Un autre point important est la gestion du répertoire courant. Par défaut, lorsque nous lançons Blender depuis un raccourci bureau par exemple, puis chargeons le fichier .blend contenant notre jeu, le répertoire courant (celui où Blender ira chercher les ressources) sera celui où se trouve l'exécutable de Blender (par exemple pour Windows C:\Program Files\Blender Foundation\Blender).
Au contraire, si nous lançons Blender simplement en double-cliquant sur le fichier .blend de notre jeu, le répertoire courant sera celui qui contient le .blend.
Il est donc important de mieux contrôler le contexte de recherche des ressources, en particulier lorsqu'on travaille avec des fichiers externes.
Pour être sûrs que notre fichier .blend fonctionne dans toutes les conditions, nous utiliserons ce petit script au début du jeu pour redéfinir le répertoire courant (attention, il faut bien enregistrer le fichier .blend avant, sinon il est impossible de trouver son répertoire courant) :
# Nous importons les modules nécessaires
from
os import
chdir
from
bge import
logic
# on va dans le répertoire où se trouve notre blend, indiqué par "//"
chdir
(
logic.expandPath
(
"//"
))
Mais que fait ce script en détail ?
Nous commençons par importer deux fonctions chdir du module os et logic du module bge. Il faut que nous indiquions à Blender où aller chercher nos fichiers ressources. Nous allons donc lui demander d'aller dans le répertoire où est sauvegardé notre fichier .blend.
Bien entendu, on ne veut pas écrire directement le chemin absolu de notre fichier. Si nous faisions cela, les ressources ne seraient trouvées que sur notre propre ordinateur, mais pas sur celui des autres collaborateurs. Heureusement, Blender propose une syntaxe pour indiquer « le répertoire où se trouve le fichier .blend courant ». On utilise pour cela la chaîne de caractère //. C'est ce que fait la ligne de code chdir(logic.expandPath("//")). On demande à Blender de nous donner, d'une manière compréhensible par le Python, l'endroit où se trouve le fichier .blend et ensuite on s'y déplace.
Maintenant tous les fichiers ressources que vous déposerez dans le même répertoire que votre fichier .blend seront facilement utilisables dans vos scripts Python en utilisant un simple chemin relatif se basant sur le répertoire de votre .blend. Quelle que soit la façon dont nous démarrons Blender, nous sommes sûrs que notre code fonctionnera !
V-F. Préparer la physique de ses objets▲
Quand nous modélisons pour du rendu classique, nous avons tendance à ne pas trop nous soucier de la taille des objets. Il suffit que les objets d'une scène aient une taille cohérente entre eux pour que le rendu soit correct.
V-F-1. Choisir les bonnes unités▲
Dans un jeu, il y a un moteur physique qui calcule la dynamique des objets parallèlement au moteur graphique. Le moteur physique du BGE est réglé par défaut de telle sorte qu'une unité de longueur Blender soit équivalente à 1 mètre et une unité de masse à 1 kilogramme. Nous conseillons fortement de donner aux objets une taille réaliste, et pour les objets soumis à la gravité une masse réaliste (voir dans la section Comportement des objets et personnages,le chapitre Le comportement des objets de notre monde pour définir la masse). En respectant ces unités, le comportement physique des objets sera plus conforme à la réalité.
V-F-2. Éviter les facteurs d'échelle▲
Il faut éviter impérativement les facteurs d'échelle non uniformes (taille différente en x, y ou z), car ils ne sont pas supportés par le moteur physique. D'une manière générale, il est préférable d'éviter tout facteur d'échelle quand c'est possible. Pour cela, appliquer le scalede votre objet (Apply Scaleavec le raccourci Ctrl+A).
V-G. Retour sur le développement des scripts Python▲
Ces paragraphes s'adressent plus particulièrement à ceux qui pensent que leur jeu contiendra une quantité importante de code Python. Si vous prévoyez de ne taper que quelques lignes de Python, vous pouvez sans remords passer au chapitre suivant. En revanche, si vous avez l'intention d'utiliser du Python de manière répétée, il est important de prendre le temps de lire ce qui va suivre.
Nous avons vu précédemment qu'il y a deux manières d'écrire du Python pour Blender : soit directement dans l'éditeur de texte interne, soit dans des modules Python externes. Quelle que soit la méthode que vous déciderez d'utiliser, il faudra que vous connectiez ensuite votre code Python à votre jeu. Vous verrez dans la section Créer son premier jeu au chapitre Déplacer le personnage qu'il vous faudra pour cela une brique logique Controller de type Python. Mais pour l'instant, retenez simplement que votre script Python doit passer par une brique logique pour fonctionner.
Cette brique permet deux modes de configuration pour le Python. Si vous choisissez le mode Script, vous devez donner un nom au script que vous avez écrit dans l'éditeur de texte interne. Ce nom n'a pas besoin d'être construit comme un nom de fichier, c'est tout simplement un nom que vous définissez vous-même en bas de la fenêtre de votre éditeur interne. Par exemple, dans la capture d'écran qui suit, le nom du script est « sonore ». Si vous aviez ce texte interne dans votre fichier Blender, vous mettriez donc « sonore »dans la case Script de votre brique logique d'activation de code Python.
Vous pouvez aussi décider d'écrire vos scripts Python dans un éditeur spécialement fait pour développer du Python. Dans ce cas, il faut impérativement que vous sauvegardiez vos fichiers Python (que l'on appelle alors des modules) dans le même répertoire que votre fichier .blend.
Dans votre brique logique, vous allez alors choisir Module et non plus Script. Ce n'est plus le nom du script que vous allez devoir saisir, mais le nom du module, suivi du nom de la fonction Python que vous voulez utiliser. Les deux doivent être séparés par un point. Imaginons par exemple que nous ayons un script Python qui se trouve dans un fichier son.py. Dans ce fichier, nous avons plusieurs fonctions, dont la fonction splitch(). Pour connecter la fonction splitch()à la brique logique, il faut sélectionnerModuleet taper son.splitch.
V-G-1. Fichier externe ou script interne, comment choisir ?▲
Nous avons vu en détail qu'il y a deux façons d'intégrer du Python dans un fichier Blender. Quelle méthode choisir ? Disons-le tout de suite, dès que nous dépassons le simple fichier de test, la bonne pratique semble être de ne jamais utiliser la fonctionnalité de script interne.
Pourquoi ? Imaginons que l'on ait plusieurs choses très similaires à faire en Python. Par exemple, on veut jouer plusieurs fois le même son, mais avec des effets différents. Dans ce cas, il est préférable de regrouper les choses pour plus de facilité. Pour cela, il faut définir différentes fonctions et exécuter la bonne, en accord avec la situation de jeu.
Toutefois, lorsqu'une brique logique Python est configurée en mode Script, on ne peut pas choisir un nom de fonction à exécuter, le contenu du script est lancé en totalité. Si nous reprenons notre exemple avec cinq façons de lancer le même son, il faudrait donc créer cinq scripts internes différents.
Maintenant, si nous voulons changer de son pour trois des cinq scripts, il va falloir ouvrir ces trois scripts et faire trois fois la même modification de nom. Ce qui était simple au départ devient donc fastidieux à gérer, et prend trop de temps.
De plus, il peut s'avérer utile d'avoir un fichier Python séparé pour l'envoyer à quelqu'un et lui demander un avis, par exemple. Envoyer un petit fichier texte sera plus simple et plus léger qu'un fichier Blender, surtout si la personne en question ne connaît pas Blender !
Par ailleurs, et même si cela dépasse largement le sujet de cet ouvrage, une bonne pratique en développement logiciel consiste à faire le moins de répétition possible. L'utilisation de fichier externe rend possible cela en rassemblant plusieurs fonctions dans le même fichier par exemple. On appelle ça factoriser son code.
Enfin, et malgré ce que nous venons de dire, il est tout à fait acceptable d'utiliser les scripts internes pour mettre en place des petites fonctionnalités rapides et simples. Tout au long de ce livre, nous utiliserons donc les deux solutions, en fonction des situations.