Approches procédurales en tant qu’outil
Selon Khaled et al. (2013), la génération procédurale de contenu dans un cadre de production peut être un outil de design. « De la même manière que les outils de design standard, les outils de design PCG visent à améliorer la chaine de travail (« workflow ») du designer, mais les outils PCG le font en ajoutant une composante générative. » (Togelius et al., 2016, p. 11). Ces outils permettent de générer de nombreux types de contenu pour le jeu, que ce soit des environnements de type urbain, des éléments d’environnement comme des paysages, des grottes ou des vallées, mais également des niveaux de jeux qui suivent des règles déterminées, comme l’outil de design de niveau 2D Tanagra avec lequel « l’humain et l’ordinateur peuvent travailler ensemble pour produire un niveau » (Smith, Whitehead et Mateas, 2010) . Appelée « mixed-initiative » (Togelius et al., 2016, p. 195), cette approche de génération procédurale requiert une contribution humaine pour être utilisée. L’apport humain dans le résultat de la génération est supérieur à la simple pression d’un bouton « générer ».
De tels outils permettent par exemple à l’utilisateur d’avoir le rôle de juge par rapport à l’esthétique du résultat obtenu. C’est le cas de l’outil de génération procédurale de végétation de Keim, Simmons, Teece, Reisweber et Drakeley (2016) . Cet outil permet de générer des variations entre les espèces de végétaux, mais également entre deux végétaux de la même espèce, tout en offrant à l’artiste le contrôle nécessaire afin de respecter les contraintes de la direction artistique définie en amont. Le générateur de pistes de ski du jeu SSX25 fait également partie de ce type d’approche procédurale. L’outil développé pour la création de ce jeu génère les pistes de ski de manière procédurale. En générant dans un premier temps un environnement simple et basique, les designers peuvent tester et corriger très rapidement la jouabilité du jeu. Dans un second temps, l’outil génère des environnements plus complexes en suivant les corrections établies. Cet aspect itératif de la génération a permis de créer des environnements de jeux complets, sans pour autant arrêter le développement du jeu ni les tests de jouabilité (Howard et Lemus, 2012). En termes de génération de ville, plusieurs travaux procèdent de la manière suivante : (1) création d’une trame des axes routiers principaux, (2) subdivisions des parcelles obtenues et (3) génération des bâtiments peuplant la zone urbaine. Ces travaux utilisent différentes méthodes pour réaliser ces étapes. Certains génèrent le réseau routier à partir de données topographiques géolocalisées (Kelly et McCabe, 2007; Müller, 2006; Tang , 2009). Le travail de Kelly et McCabe (2007) permet de créer de larges zones urbaines en utilisant un système de grammaires de type « L-system » pour subdiviser le réseau routier principal obtenu à partir des données topographiques.
L’utilisateur a ensuite la possibilité d’intervenir dans la génération des rues en apportant des « points de tension » ou directement à l’aide d’un « pinceau » en traçant des axes manuellement. Une fois que la grille routière répond aux attentes, l’outil génère des bâtiments en volume sous forme de parallélépipèdes permettant d’obtenir une ville complète. Le travail de Whelan, Kelly et McCabe (2008) quant à lui permet à l’utilisateur de créer directement les principaux axes du réseau routier à l’aide de l’interface de l’outil. « L’interface graphique permet la manipulation directe d’éléments structurels tels que des intersections de routes et permet également à l’utilisateur de modifier les différents paramètres qui contrôlent la génération procédurale de la route et des bâtiments » (Whelan et al., 2008). Une autre solution existante se concentre uniquement sur la génération pseudo-infinie de villes et utilise un repère quadrillé pour générer un nombre donné de bâtiments (Greuter, Parker, Stewart et Leach, 2003).
Tous ces travaux de génération procédurale de villes s’approchent des objectifs de cette maîtrise car ils permettent en effet de générer une ville et laissent l’utilisateur créer le réseau routier comme il le souhaite. Cela permet de répondre aux attentes des directeurs artistiques dans le cadre d’une production de jeu vidéo. Ils ne répondent cependant pas entièrement à la problématique de cette maîtrise car même si le résultat généré a une envergure satisfaisante et pourrait constituer l’environnement complet attendu, les modules utilisés pour représenter les bâtiments ne répondent pas à la qualité visuelle espérée. Même pour les outils les plus avancés tels que les travaux de Müller et al. (2006) et de Lipp et al. (2008) , les bâtiments générés n’ont pas une assez grande variété et le joueur est susceptible de rapidement remarquer la répétition des bâtiments, brisant ainsi son immersion.
Création des modules et de leurs matériaux
L’approche de génération semi-automatique proposée ne s’occupe pas de la création des différents modèles 3D, mais elle s’affaire plutôt à agencer les différents modules fournis par l’artiste de façon à créer des bâtiments. Pour que l’outil fonctionne correctement, il faut donc fournir un ensemble minimal de modules : un module de porte, un module de fenêtre et un module de mur latéral. Évidemment, plus l’artiste crée de modules, plus les bâtiments sont variés. Dans le cadre de cette maîtrise, un ensemble de 20 modules (voir l’annexe 1) a été réalisé. La création de ces modules a permis de raffiner l’outil – en adaptant le code et les fonctionnalités en fonction des contraintes rencontrées – et d’établir une série de règles que les modules doivent respecter pour être utilisés dans l’outil de génération procédurale de ville. L’échelle et l’orientation des modules de façades constituent les deux premières contraintes. Chacun de ces modules doit avoir une largeur de deux mètres, selon l’échelle de mesure du logiciel de modélisation 3D.
Cette dimension imposée a été définie de façon empirique pour ce prototype, à partir de plusieurs expérimentations. Un module de façade doit être aligné sur l’axe des Y et faire face à l’axe des X de valeur positive (voir la Figure 2.2). Le troisième point important à prendre en compte est la position du point de pivot (ou point d’origine). En effet, le point de pivot d’un objet 3D détermine sa position dans un espace 3D et l’outil utilise les valeurs de position des points de pivot pour placer correctement les modules de façades côte à côte. Le point de pivot doit être dans le coin inférieur gauche du module lorsqu’il est vu de face. L’artiste peut choisir la hauteur du module de façade car l’outil s’adapte selon celle-ci. La profondeur des fenêtres et l’avancée du balcon ne doivent pas excéder deux mètres selon l’axe des X. Ces contraintes laissent amplement de liberté à l’artiste pour créer des modules cohérents. En ce qui concerne les modules des murs latéraux (voir la Figure 2.2), ils doivent être dirigés de manière perpendiculaire aux modules de façades, orientés vers l’axe des X de valeur négative et faire face à l’axe des Y de valeur négative. Leur hauteur peut être de dimensions variées, mais leur largeur doit faire trois mètres pour répondre aux contraintes de l’outil.
Concernant l’aspect esthétique des modules de bâtiments, l’outil a été créé pour que l’artiste ait la plus grande liberté possible. Du moment qu’il respecte les contraintes énumérées ci-dessus, l’artiste peut choisir l’époque et le style architectural qui lui conviennent. L’utilisateur peut donc générer des bâtiments de styles totalement différents, comme par exemple des bâtiments modernes new yorkais, des bâtiments européens de type haussmannien ou encore des bâtiments répondants à une architecture futuriste. Actuellement, l’outil accepte sept types de modules. En plus des modules de porte, de fenêtres, de murs, de mur arrière et de toit, l’outil peut aussi accepter des vitrines et des « fenêtre rez-de-chaussée ». Ces deux derniers éléments viennent compléter le premier étage du bâtiment avec la porte. Un paramètre permet à l’artiste de choisir entre ces deux options. Tandis que les « fenêtres rez-de-chaussée » doivent répondre aux mêmes contraintes que les fenêtres normales, les vitrines offrent une liberté supplémentaire. En effet, la largeur des vitrines peut être un multiple de deux mètres. Un ensemble de six modules de vitrines a été modélisé ayant comme largeur deux mètres, quatre mètres, six mètres et dix mètres. En fonction de la largeur totale du bâtiment, l’outil sélectionnera de manière aléatoire les vitrines et adaptera la sélection pour que la longueur additionnée des modules sélectionnés soit égale à la longueur totale de la façade (voir Figure 2.3).
Optimisation des blocs
Lors de la création d’un jeu vidéo, la fluidité visuelle est primordiale. Le nombre d’images par seconde (IPS) que l’engin de jeu doit générer ne doit pas descendre en dessous de 30 ou 60 par exemple, selon les jeux. Pour ne pas arriver en dessous de cette limite, les capacités graphiques sont très importantes et doivent être prises en compte dans le processus de création. Un des facteurs importants qui influence les performances est le nombre de polygones des modèles 3D; il doit être le plus bas possible. Dans le cas de l’outil de génération procédurale de ville, les blocs créés par l’artiste sont dupliqués plusieurs fois. En effet, environ 50 modules servent à constituer un bâtiment, la ville étant composée d’une centaine de bâtiments au minimum, la minimisation du nombre de polygones de chaque module est d’autant plus importante puisque chacun de ceux-ci sera dupliqué plusieurs fois dans l’environnement. Une des solutions utilisées par l’outil permettant de réduire les coûts de performance est l’utilisation de levels of details (LOD). Il s’agit d’une méthode qui remplace un modèle 3D, à mesure que la caméra s’éloigne de celui-ci, par une version similaire comprenant moins de détails, donc moins de polygones.
Telle que représentée dans la Figure 2.7, cette méthode permet de réduire drastiquement le nombre de polygones présents dans la scène et de réduire le temps de calcul lié aux polygones. Une deuxième solution utilisée pour optimiser les performances consiste à réutiliser les mêmes modèles 3D en leur appliquant différents matériaux. L’artiste peut donc créer plusieurs variations d’un modèle en optimisant l’espace mémoire nécessaire pour conserver l’information liée à la géométrie (voir Figure 2.5). Avec le même souci d’optimisation de l’espace mémoire, l’artiste peut également réutiliser le même matériel sur plusieurs modèles 3D différents. La Figure 2.8 représente cette situation alors que plusieurs modèles 3D utilisent les mêmes matériaux génériques (partagés entre les modules), bien que certains modèles utilisent également des matériaux uniques. Une fois que l’utilisateur a créé et importé les modules et les textures associées, il peut passer à l’étape suivante du processus de création : la génération du réseau routier grâce au gestionnaire d’intersections.
INTRODUCTION |