Création d'un objet de jeu vidéo

Un objet 3D du concept au gameplay

La création d'objets 3D pour les jeux vidéo est un processus qui varie énormément d'un jeu à l'autre, et qui évolue très vite au fil de la technologie. Les joueurs passionnés entendent souvent parler de textures, de shaders, ou de termes abstraits comme physically based ; mais les développeurs professionnels prennent rarement le temps d'expliquer comment ils travaillent.

Cet article vise à montrer un exemple de processus créatif moderne pour réaliser des éléments de jeux vidéo. L'exemple choisi est le projet de jeu vidéo Helium Rain, un projet qui ne représente pas forcément un cas typique, mais qui reste proche des tendances de l'industrie. Il s'appuie sur deux outils gratuits - le modeleur 3D Blender, et le moteur de jeu Unreal Engine 4. Les techniques évoquées sont généralement transposables à d'autres technologies.

La corvette Dragon, un vaisseau de Helium Rain

La 3D pour le jeu vidéo

Le jeu vidéo est le domaine le plus exigeant de la 3D. En presque vingt ans de jeux vidéo 3D, la course technologique n'a jamais ralenti et chaque nouveau titre tente à son tour de repousser les limites de la qualité visuelle, tout en restant accessible au plus grand nombre. Trois chiffres suffisent à visualiser à quel point la 3D temps réel est impressionnante :

  • chaque image de jeu vidéo doit être rendue en quelques millièmes de seconde pour produire un résultat fluide ;
  • les jeux vidéo modernes affichent parfois plus de dix millions de triangles à l'écran ;
  • la PlayStation 4 est deux fois plus puissante que le meilleur super-calculateur disponible en 1997 - une machine conçue pour simuler des essais nucléaires.

Et malgré ces chiffres fous, il n'a jamais été aussi simple de créer des éléments de jeux vidéo. La raison à ce fait est très simple : pour un ingénieur qui travaille sur un jeu vidéo, il y a en moyenne dix artistes. Il est donc crucial pour les développeurs que les artistes travaillent efficacement, sans perdre de temps, sans s'adapter systématiquement aux moindres contraintes techniques. Voyons ensembles le résultat !

Concept et modélisation

La première étape de la production d'un élément de jeu est le concept art, la conception avec papier et crayon. Le concept permet d'essayer rapidement différentes atmosphères, différents styles, pour prendre des décisions avant de lancer la véritable production.

Concept art et rendu final dans Destiny - © Bungie/Activision

Dans notre cas, l'étape du concept art est ignorée - essentiellement parce que la compétence n'existe pas dans l'équipe. C'est donc l'étape suivante qui est directement attaquée : la modélisation, et plus précisément ce qu'on appelle le high poly. C'est une modélisation 3D à très haut niveau de détail, sur laquelle tout est possible. Il y a typiquement plusieurs millions de triangles sur un objet de ce type, et les outils pour le produire sont de plus en plus éloignés de la technique.

On parle aujourd'hui beaucoup de sculpture 3D ; c'est-à-dire que l'outil de modélisation utilisé cherche à se rapprocher des méthodes de la sculpture classique. De tels outils sont devenus prépondérants pour les personnages ou les éléments vivants des jeux, par exemple. Dans notre cas, le high poly est réalisé intégralement dans Blender, par modélisation classique, en manipulant des faces. L'objet utilisé comme exemple dans cet article est un moteur de vaisseau.

High poly

C'est l'étape la plus longue et la plus importante pour le résultat final, et paradoxalement le high poly ne sera jamais inclus dans le jeu. Il est en effet bien trop complexe, nécessite trop de ressources matérielles, et se prête mal aux étapes suivantes du rendu. Dans le jeu vidéo lui-même on utilisera donc un autre objet, qu'on appelle le low poly parce qu'il sera constitué de quelques milliers de triangles, et plus quelques millions. Toute la difficulté du temps réel est de produire un rendu équivalent à ce high poly, mais avec un low poly. Nous allons voir tout de suite comment ces deux versions de l'objet cohabitent.

Pour Helium Rain, nous produisons les low poly en éliminant tous les détails du high poly, là où d'autres développeurs vont plutôt créer un nouvel objet à partir de zéro, ou encore utiliser des outils automatisés. Chacun sa méthode !

Low poly

L'étape finale de ce processus de modélisation 3D est de réaliser ce qu'on appelle une UV map - l'association de chaque surface 3D à une surface 2D, pour que le jeu vidéo puisse faire correspondre des images 2D à chaque face de l'objet 3D. Vous pouvez en apercevoir un échantillon en bas de l'image précédente : chaque morceau de la surface 3D a été découpé et aplati en 2D, et l'objet garde en mémoire l'association entre 3D et 2D. C'est ainsi que au moment du rendu, pour chaque élément de surface, on peut retrouver la portion de textures concernée.

Le normal mapping, le détail à moindres frais

Revenons à notre high poly. Ses formes, ses détails sont très importants pour la qualité du rendu, mais il est impossible de les garder dans la géométrie 3D de l'objet pour des raisons de performance. Il faut donc tricher et la technique de triche fondamentale s'appelle le normal mapping. Le normal mapping consiste à encoder tous ces détails de géométrie dans une image - une texture ou map dans le jargon du rendu 3D. Chaque pixel de la texture correspond à la direction d'une face, via un encodage rudimentaire. L'algorithme d'éclairage du jeu vidéo utilise ces données pour modifier légèrement le comportement de la surface, afin de simuler du relief.

High poly, normal map, et le résultat sur un simple plan - © Wikimedia

Cette texture est produite en réalisant, en quelque sorte, la différence entre le high et le low poly. Nous utilisons Blender pour générer cette texture, en quelques secondes de travail, à partir des deux objets. Ce processus est connu sous le nom de baking et c'est une étape universelle aujourd'hui pour réaliser un jeu vidéo. Passé ce stade, le high poly est totalement inutile, on se concentre désormais sur le low poly uniquement.

Le baking est généralement l'occasion de produire une seconde texture, l'ambient occlusion map ou AO map. Cette texture en noir et blanc permet d'assombrir les recoins des objets, ce qui leur donne généralement un aspect plus réaliste. Elle est un peu moins connue et n'est pas aussi systématique que la première, mais nous en utilisons toujours une dans Helium Rain.

Shaders, matériaux et textures

Les shaders, c'est comme cela que l'on nomme les programmes qui réalisent le rendu des jeux vidéo. Ces programmes sont exécutés sur la carte graphique et produisent, à partir d'objets 3D, de textures et de paramètres divers, chaque pixel à l'écran. C'est un shader qui simule l'effet de la lumière sur un objet, évalue les reflets, les couleurs, les reliefs et produit une couleur pour chaque pixel.

Autrefois partie intégrantes des cartes graphiques, ils sont devenus programmables, spécifiques à chaque jeu vidéo, et sont aujourd'hui générés automatiquement via des outils graphiques. On parle alors de material : un material est une représentation abstraite utilisée pour générer des shaders, des programmes pour votre GPU. Voyons ensemble à quoi ressemble la production de materials dans Unreal Engine 4.

Un exemple de material

Le graphe à droite de l'image permet de produire le rendu visualisé à gauche. Cette description graphique permet à un artiste de générer des shaders sans avoir de compétence particulière en programmation, et offre un contrôle incroyable sur le rendu. Le cas visualisé ici est le material qui contrôle le rendu de chaque objet de Helium Rain. Nous utilisons le même partout, avec des paramètres différents, et des textures différentes. C'est ici, par exemple, que la normal map est prise en compte.

Dans Unreal Engine 4, on procède typiquement en assemblant des materials génériques, que l'on réalise suivant le modèle du Physically Based Rendering ou PBR. Conçu pour respecter les lois de la physique et initialement introduit dans le monde de l'animation, ce modèle s'est immiscé en quelques années dans les principaux moteurs de jeu. Le but de cet article n'est pas d'introduire cette technologie complexe, nous dirons simplement qu'elle propose aux artistes une vision intuitive des materials.

Quelques exemples en jouant avec les propriétés d'un matériau PBR

Nous disposons donc d'une banque de matériaux PBR, et notre material se borne à assembler les différents composants suivant les consignes d'un masque, une texture qui n'est jamais affichée dans le jeu mais contrôle le material. Peinture ? Métal brut ? Lumière ? Éraflure de la surface ? Tout ça est codé par une couleur dans la texture, à gauche sur l'image ci-dessous.

Masque, normal map, AO map

Dans notre processus, par exemple, les couleurs ont l'association suivante :

  • le noir représente du métal brut ;
  • le bleu représente la peinture principale ;
  • le rouge, le rose indiquent la peinture secondaire ;
  • le vert indique du métal brillant.

Cette correspondance indirecte a un avantage supplémentaire : les couleurs elles-mêmes ne sont qu'un paramètre ! La peinture principale peut être blanche comme dans notre objet d'exemple, mais aussi bleue, noire, rouge, elle peut avoir un motif ou des détails supplémentaires… Cette approche est donc extrêmement flexible.

Il ne reste plus qu'à importer le low poly dans le jeu, lui assigner le material configuré et effectuer quelques menu réglages. On réalise aussi, à ce moment-là, une deuxième version du low poly, qui est encore moins détaillée et qui sera utilisée à grande distance pour alléger la consommation en ressources.

Voilà à quoi ressemble le résultat final dans l'éditeur d'Unreal Engine, avec les collisions en violet :

Objet final

C'est fini pour la partie 3D, mais il reste encore du travail !

Intégration

Maintenant que l'on dispose d'un objet 3D complet, il faut que le jeu lui-même puisse s'en servir. Pour ce faire, nous avons développé un mécanisme de catalogue, une énorme liste de tous les composants de vaisseau disponibles.

Le catalogue des pièces

Rien de tout cela n'est stocké dans le code du jeu - ajouter ce moteur, le rendre visible dans les menus, utilisable par un vaisseau, tout ça est fait sans jamais changer une seule ligne de code puisque nous utilisons le mécanisme de gestion du contenu du moteur. Le catalogue est ici un asset comme le sont des textures ou des objets 3D, ce qui permet d'ajouter du contenu sans intervention en C++.

Le code associé au catalogue est relativement simple et lisible, même pour quelqu'un qui n'a pas l'habitude de l'API associée au moteur. On génère un formulaire graphique de ce type en quelques lignes de C++ avec Unreal Engine 4.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
UCLASS()
class UFlareSpacecraftComponentsCatalog : public UDataAsset
{
    GENERATED_UCLASS_BODY()

public:

    /** Orbital engines */
    UPROPERTY(EditAnywhere, Category = Content)
    TArray<UFlareSpacecraftComponentsCatalogEntry*> EngineCatalog;

    /** RCS engines */
    UPROPERTY(EditAnywhere, Category = Content)
    TArray<UFlareSpacecraftComponentsCatalogEntry*> RCSCatalog;

    /** Weapons */
    UPROPERTY(EditAnywhere, Category = Content)
    TArray<UFlareSpacecraftComponentsCatalogEntry*> WeaponCatalog;

    /** Internal modules */
    UPROPERTY(EditAnywhere, Category = Content)
    TArray<UFlareSpacecraftComponentsCatalogEntry*> InternalComponentsCatalog;

};

Chacune des entrées que vous avez pu voir dans le catalogue correspond à un formulaire graphique dans lequel nous entrons des données et du contenu. L'objet 3D lui-même y est lié, ainsi que le prix de la pièce, l'icône ou l'accélération du moteur : c'est un bric à brac de toutes les informations utiles ! Voici l'entrée de notre objet :

Une entrée de catalogue

On reprend ici le même procédé, mais avec un code C++ un peu plus massif. Le principe reste le même : associer, par introspection, une structure C++ à un formulaire graphique. Disposer d'un tel outil dans le moteur de jeu est extrêmement pratique.

Pour en savoir plus

J'espère que ce rapide exposé vous a appris des choses. Gardez en tête qu'il s'agit d'un exemple issu d'un jeu particulier et que chaque équipe a ses propres méthodes. Si vous voulez approfondir cet article, voici quelques ressources utiles :

Le forum Multimédia & Jeux Vidéo de Zeste de Savoir est toujours prêt à guider de nouveaux débutants, alors n'hésitez pas à vous lancer si la 3D vous intéresse. De même, n'hésitez pas à poser ici toutes les questions qui vous passent par la tête !

Merci de votre lecture.


11 commentaires

Tres tres interessant.

J'ai deux questions:

  • Meme si vous n'avez pas les competences artistiques pour le concept art, utilisez vous quelques croquis ou une description textuelle de ce que vous voulez obtenir ?
  • Il y a quelques annees je lisais des articles sur des techniques pour remplacer les polygones par des objets inspires d'atomes. Est-ce que c'est toujours d'actualite et si oui, utilise et comment cela s'integre par rapport a des polygones ?
+2 -0

Meme si vous n'avez pas les competences artistiques pour le concept art, utilisez vous quelques croquis ou une description textuelle de ce que vous voulez obtenir ?

Höd

Disons que pour chaque pièce il y a un élément qui définit le style du reste et dont j'ai une très bonne idée avant de commencer. Par exemple sur le moteur, avoir une vingtaine de moteurs arrangés ensemble comme sur les fusées russes. Sur le vaisseau montré au début de l'article, c'était la structure en disque à l'arrière. Une fois que cette partie-là est bien définie, le reste vient tout seul, en essayant de garder le même style.

Il y a quelques annees je lisais des articles sur des techniques pour remplacer les polygones par des objets inspires d'atomes. Est-ce que c'est toujours d'actualite et si oui, utilise et comment cela s'integre par rapport a des polygones ?

Höd

Pour moi ça ne s'est jamais matérialisé dans une technologie de jeu vidéo. Il y a eu une démo très populaire pendant un moment mais que personne ne semble avoir vraiment testée, et si le concept de base est viable, je suis sceptique sur le fait qu'il soit meilleur que le polygonal.

Par contre, côté modélisation, le polygonal comme on en parle ici est en voie de disparition du point de vue de l'artiste. Les outils comme zBrush c'est clairement ce qui se fait de plus en plus.

Merci beaucoup pour cet article, et plus généralement pour le travail que vous faites autour d'Helium Rain (présentation, explications…).

J'ai – aussi – deux questions :

Ce que vous présentez me fait penser à des choses qui se font dans la 3D appliqué aux films/courts métrage (du peu que je sais). Ça reste un domaine proche, mais les contraintes ne sont pas les mêmes, car on peut mettre 1 heure à générer 1 seconde de vidéo. Le processus reste-t-il globalement le même, ou y a-t-il des différences majeurs ?

Il y a quelques années, des chercheurs parlaient du fait que les méthodes de lancer de rayons (à la POV-ray) allaient bientôt arriver dans les jeux vidéo. Est-ce que ça se fait aujourd'hui ? Si non, c'est à cause de problèmes de performance ou d'utilité (au sens, c'est pas plus beau) ?

Encore merci pour tout votre travail sur Helium Rain, et tout ce que vous faites autour !

+0 -0

Ce que vous présentez me fait penser à des choses qui se font dans la 3D appliqué aux films/courts métrage (du peu que je sais). Ça reste un domaine proche, mais les contraintes ne sont pas les mêmes, car on peut mettre 1 heure à générer 1 seconde de vidéo. Le processus reste-t-il globalement le même, ou y a-t-il des différences majeurs ?

Gabbro

Je n'ai jamais travaillé dans la vidéo donc je ne saurais pas trop dire, mais les deux domaines semblent se parler. Il y a des technologies communes, notamment pour les artistes ; c'est surtout la partie rendu qui est totalement différente, avec des process bien plus compliqués dans le film/vidéo.

Le jeu vidéo c'est souvent une histoire de produire beaucoup de contenu très technique et formaté parce q'on vise 10h de gameplay avec un joueur qui regarde où il veut, le film c'est du contenu unique à chaque image avec éventuellement plus de folie dans un petit objet de détail, parce que le réalisateur va le montrer à 100% du public, même si ça dure une demi-seconde.

Il y a quelques années, des chercheurs parlaient du fait que les méthodes de lancer de rayons (à la POV-ray) allaient bientôt arriver dans les jeux vidéo. Est-ce que ça se fait aujourd'hui ? Si non, c'est à cause de problèmes de performance ou d'utilité (au sens, c'est pas plus beau) ?

Gabbro

Pour moi ça ne se fait pas du tout, ça va même dans le sens inverse. On est passé de moteurs de rendu qui faisaient tout en pure 3D à des moteurs qui récupèrent les infos de la scène en 3D, stockent toutes les données (textures, propriétés des matériaux, directions des faces, lumières, etc) en 2D, avant d'appliquer les algorithmes d'éclairage à des scènes 2D (qui contiennent les infos de profondeur, directions, reliefs etc, mais 2D quand même).

Pour dire ça plus simplement, la composition 2D est devenue le mécanisme central de rendu dans la 3D temps réel. Exactement comme un artiste 2D qui fait une maquette, la prend en photo et la repeint dans Photoshop.

Merci pour cet article fort intéressant :)

Sur cette image,le high poly me semble plutôt "long" au niveau de son élévation,la Normal Map donnerai pourtant le même résultat si l'on rendait les objets sur l'image moins longs,non ?

Parceque dans le cas de l'exemple ça peut le faire,mais si quelqu'un veut faire des Floaters il serai plus pratique pour le baking et le paramétrage de la cage de rendre l'objet plus plat,AMHA.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte