Sites


Blender pour le jeu video

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).

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.

Passer en mode Blender game

Nous choisirons aussi, dans le panneau dédié, le shadingGLSLdans l'ongletRender pour nous offrir plus de possibilités et de réalisme dans l'affichage en temps réel.

Changer les options d'affichage en GLSL

Remarquons également que l'onglet Render a sensiblement changé depuis la sélection du modeBlender 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.

Deux interfaces de rendu du jeu dans 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.

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.

créer une nouvelle fenêtre dans 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.

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.

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.

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.

éditeur python interne à Blender

L'éditeur de texte interne de Blender

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.

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ébugger 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.

Sous Windows

Si vous utilisez Blender sous Windows, dans le menu,  nous choisissons Window > Toggle System Console.

affichage de la console python dans Blender

Et une belle fenêtre apparaît.

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.

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 vosApplications.

L'applicationTerminal(c'est la console de Mac) se trouve dans le dossierUtilitaires. 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.

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 !

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.

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é.

Éviter les facteurs d'échelle

Il faut éviter impérativement les facteurs d'échelle non-uniforme (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 Scale avec le raccourci Ctrl+A).

Appliquer les transformations dans Blender

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 Controllerde typePython. 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.

Ecrire le script Python directement dans Blender

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 Moduleet non plusScript. 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électionner Moduleet taper son.splitch.

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 script 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 a 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.

Il y a une erreur de communication avec le serveur Booktype. Nous ne savons pas actuellement où est le problème.

Vous devriez rafraîchir la page.