Guides

3D tracks pour Farming Simulator 19 : réalisez vos chenilles en quelques clics sur Blender

Kim Brandwijk, de Farmsim Forensics, s’est penché sur le problème de la réalisation des tracks en 3D. Autrefois réalisable avec des scripts, ce qui excluait le mod pour un usage sur consoles, le développeur propose une méthode à partir du logiciel Blender, afin de créer le fameux fichier « trackArray » que seul Giants Software arrivait à produire.

L’article ci-dessous est une traduction en bon français du post de Farmsim Forensics disponible ici. Nous les remercions d’avoir mis à disposition de tous ce super outil et de nous avoir autorisé ce partage.

Considéré par beaucoup comme le Saint Graal des véhicules à chenilles dans FS19, c’est un sujet de controverse dans la communauté : les chenilles en 3D. Et pas n’importe quelles chenilles 3D, mais des chenilles 3D qui ne nécessitent aucun script, et qui peuvent être créées dans n’importe quelle forme, et approuvées par GIANTS pour PC et consoles.

Comment fonctionnent les 3D tracks de GIANTS ?

Une chenille est composée de 3 éléments : un maillage d’une chenille (plate), une image spéciale (trackArray) et un peu de shader pour donner à la chenille sa forme finale, en utilisant les informations de l’image.
Cette technique est basée sur quelque chose appelé Vertex Animation Texture (VAT), et comme son nom l’indique, elle fonctionne en encodant des informations sur la position et/ou la rotation des sommets en pixels d’une image. C’est très efficace, car vous pouvez stocker beaucoup d’informations dans une petite image (vous pouvez encoder une animation de 30 minutes avec des centaines de structures animées dans une seule texture 4K), et parce que tout est traité par le GPU. Cela ne pèse pas sur le CPU, il est donc généralement très performant.

1 js73n7X6mjMCnudlgSAbhQ
Un exemple d’image trackArray.

Le trackArray est composé de deux images. Celle du haut contient les informations sur la position de chaque « lien » dans la chenille, celle du bas contient les informations pour la rotation. Pour les chenilles en caoutchouc, ces valeurs sont interpolées en douceur, car une chenille en caoutchouc est une forme souple. Pour les pistes de type chenille métalliques, chaque pixel correspond à un seul maillon de la chenille.

Stocker les informations de position et de rotation dans un pixel ?!

Maintenant que le code du shader a révélé qu’il voulait lire les données de position et de rotation de cette image, la prochaine étape pour percer le mystère consistait à comprendre comment ces informations sont codées dans ces pixels colorés. Encore une fois, le code du shader a livré quelques secrets, car il utilise ‘xyz’ de l’image pour la position (coordonnées simples) et ‘xyzw’ pour la rotation, suggérant que les informations de rotation doivent être stockées sous forme de valeurs de quaternion, qui est une représentation spéciale de rotation (voir https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation pour une introduction approfondie sur les quaternions). Le décodage de ces données, pixel par pixel, à partir d’images trackArray existantes, et leur comparaison avec la position et la rotation réelles des éléments de la piste, ont confirmé la théorie, nous savons donc maintenant quelles informations stocker dans l’image et dans quel format elles doivent être stockées .

Création de nouvelles formes de chenille

Aussi agréable que soit un exercice de décryptage des pixels d’une image, c’est un exercice futile sans la possibilité de générer nos propres formes de chenilles toutes neuves. Il s’avère que toutes les pistes de GIANTS sont créées dans un programme de modélisation 3D coûteux appelé Houdini, qui dispose d’un module complémentaire pour la VAT. Ces outils ne sont pas disponibles pour le moddeur moyen, j’ai donc décidé de créer quelque chose pour Blender qui aurait le même objectif.

1 cLrylECwtwvaU vpu3JaWw
Dessin d’une forme de chenille dans Blender.

Pour la forme de la chenille, j’ai opté pour un objet courbe. Il est très facile de modifier la forme, elle peut même être générée à partir d’un maillage existant et d’autres objets peuvent facilement être configurés pour suivre une courbe.
Pour représenter la chenille, une armature avec 100 os (bones) est mise en place pour suivre la courbe. Pour les chenilles en caoutchouc, ces 100 structures offrent une précision de 10 cm par pixel ou mieux, sur la base du maillage des chenilles par défaut qui est de 10 mètres de long.

Cette technique est un moyen rapide et facile de définir des formes de piste. Le fichier blender, en partage à la fin de l’article, offre également la possibilité d’utiliser une image d’arrière-plan pour recréer facilement des formes de chenilles existantes dans le monde réel.

Création d’images TrackArray

Malheureusement, Blender n’a pas de fonctionnalité VAT. Il y a eu quelques expériences d’utilisateurs, mais aucune d’entre elles n’a abouti à quoi que ce soit d’utilisable à cette fin, il devrait donc être programmé à partir de zéro. Pour rester sur le thème des « choses pour lesquelles Blender n’a pas de support », il n’y a pas de support DDS dans Blender. Il n’y a pas non plus d’autre format d’image intégré adapté à notre objectif. Le seul format qui prendrait en charge la profondeur de 32 bits dont nous avons besoin pour stocker les informations est OpenEXR. Cependant, aucune bibliothèque ne prend en charge la conversion d’EXR en DDS. Pas de problème, nous pouvons simplement créer notre propre DDS, directement à partir de Python. Je suis sûr qu’il y a une bibliothèque qui peut faire ça, non? He bien non. Ce qui existe, cependant, c’est un module Python pour écrire des fichiers TIFF, un format qui prend en charge une profondeur de 32 bits et qui peut facilement être converti en DDS par… à peu près tous les outils.

Ainsi, le script lirait la position et la rotation de chaque os de la chaîne, l’écrirait dans une image TIFF et, à la fin du script, convertirait les TIFF pour la position et la rotation en un seul fichier de textures DDS. Il s’avère qu’il existe un million de façons différentes de gâcher la lecture, la conversion et l’écriture de coordonnées et de quaternions…

1 54cqQCBQSEf65yCxEU634A
Tentative 68, 231 et 478

Et puis, enfin, c’est arrivé.

1 F3vgcSskPkWxRqc q413w
Chenilles 3D de différentes formes et tailles

Mais ce n’était pas la fin complète de l’histoire. L’exportateur a fonctionné, mais en raison de toutes les bibliothèques et outils nécessaires, l’installation était devenue un cauchemar, exécutant Blender avec des privilèges d’administrateur pour l’installation, empaquetant les outils de ligne de commande dans l’addon, aucune des choses que vous voudriez, idéalement.

Lorsque j’ai d’abord pensé à écrire directement un DDS, cela m’a semblé être une tâche ardue. C’est un format de fichier compliqué, avec des en-têtes et toutes sortes d’indicateurs et de champs que vous devez définir correctement. Mais… nous ne créons pas n’importe quel DDS, nous créons un DDS très, très spécifique, avec une mise en page très spécifique : 2 images, toujours avec la même taille, la même profondeur de bits, pas de mipmaps, etc. A part le pixel données, le DDS serait toujours complètement identique. Alors pourquoi ne pas tout simplement coder en dur et simplement y mettre les jolies couleurs pour la forme spécifique de la chenille. Cela s’est avéré beaucoup plus facile, plus rapide et a éliminé toutes les bibliothèques et outils de ligne de commande. Et l’exportateur était terminé.

1 x3lvE dtrwSDPKnl5rtPOw
Assurez-vous de tout faire dans le bon ordre !

Alors… comment créer vos chenilles ?

Si vous lisez toujours ceci, il vous reste probablement une question : comment puis-je créer mes chenilles ? Tout d’abord, téléchargez le fichier blender à partir des liens de téléchargement ci-dessous. À la manière d’Alice au pays des merveilles, le fichier contient trois objets principaux : une image d’arrière-plan (« REMPLACEZ-MOI »), une courbe (« EDITEZ-MOI ») et une armature (« EXPORTEZ-MOI »).

1 yJNv7z3o K0dzEyEKHnw6g

Ne faites rien tourner, ne bougez rien, ne pivotez rien. La seule chose que vous avez à faire est de façonner la courbe comme vous le souhaitez, en utilisant une image d’arrière-plan comme référence si nécessaire.

1 hWfj4XYAn0AwLvv381lcWg

Lorsque vous avez terminé, sélectionnez l’armature à exporter.

Exportation de l’image TrackArray

Pour exporter l’image TrackArray, vous devez d’abord télécharger et installer le module complémentaire d’exportation. Avec l’addon correctement installé, il devrait y avoir une nouvelle entrée dans le menu Fichier > Exporter pour l’image TrackArray.

1 tjIosEyvnAd8umP0J HCeA
La nouvelle option d’exportation pour les images TrackArray

Avec l’armature sélectionnée (étiquetée « Exportez-moi »), sélectionnez une nouvelle option d’exportation. La boîte de dialogue d’enregistrement standard s’ouvre et vous pouvez sélectionner l’emplacement d’enregistrement de votre image TrackArray.

Toutes nos félicitations ! Vous venez de créer votre propre forme de chenille 3D.

Vous êtes maintenant prêt à utiliser votre nouvelle forme TrackArray dans l’éditeur Giants.

Assembler la chenille dans GIANTS Editor

Pour la dernière étape, nous allons passer à GIANTS Editor. En théorie, vous pouvez également effectuer ces étapes dans Blender, car l’incroyable exportateur communautaire de SterneIdioten vous permet de sélectionner des shaders et de définir des paramètres de shader, mais cela ne donnera pas vie à la chenille tant que vous ne la chargerez pas dans l’éditeur du jeu, donc pour le bien de cet article, nous le faisons dans GIANTS Editor.

Tout d’abord, assurez-vous d’avoir exporté un maillage plat. Comme je l’ai mentionné précédemment, GIANTS utilise un maillage de piste de 10 mètres de long, qui fonctionne particulièrement bien avec le nombre d’os que nous avons utilisé pour générer notre trackArray, donc à moins que vous ne sachiez exactement ce que vous faites, je vous suggère de vous en tenir à ces dimensions.

1 8dBXImiSuTl3VgrUp eSKw
La forme de maillage plat dans GIANTS Editor

Ensuite, nous allons affecter un shader à notre mesh. Le shader est une variante spéciale du vehicleShader que nous connaissons et utilisons tous. Il n’est pas inclus dans les fichiers de jeu de base partagés, mais il est disponible via un mod GIANTS Axion Terra Trac sur le ModHub officiel. Copiez ce shader dans votre dossier mod et sélectionnez-le. Sous variation, choisissez ‘motionPathRubber_secondUV_colorMask’. Cela fera temporairement disparaître votre maillage de chenille. C’est tout à fait normal, car nous ne lui avons pas encore parlé de notre image TrackArray.

1 YxWbgdP5cWmLDvk3RZvzMg
Le VehicleShader essayant de créer une forme de chenille

Dans le panneau des propriétés du shader, cliquez sur les 3 petits points de « Custom Texture 3 » et sélectionnez l’image TrackArray que nous avons créée.

1 BApHnvr02SuFu AzzaqvYQ
Notre nouvelle image TrackArray appliquée au shader

La map pour l’usure, la saleté, l’AO avec leur propre carte UV, ainsi que le matériau et la couleur UDIM basés sur votre première carte UV sur votre maillage, fonctionnent tous comme toutes les autres pièces du véhicule, cela devrait donc vous sembler familier. Le résultat final, correctement texturé et configuré, devrait ressembler à ceci :

1 QVJIzJwDuJzyEVOn88JFXg
Notre chenille finale, avec les bonnes textures, saletés et normal map

Je vais passer la configuration des chenilles pour les monter sur un véhicule. Il existe de nombreux exemples sur la façon de procéder. Une vidéo de bout en bout est en préparation qui inclura également cette partie du processus.

Et après?

Il s’agit de la version initiale du projet et de l’addon pour Blender. Et bien qu’il soit entièrement fonctionnel pour les chenilles en caoutchouc, je continuerai à travailler dessus pour apporter la même fonctionnalité à Blender pour les chenilles rigides. En projet également, j’aimerais permettre la visualisation des chenilles directement dans Blender. Cela fait partie d’une tentative plus large d’apporter d’autres parties du vehicleShader (comme les matériaux UDIM) à Blender. On vous tient au courant !

Kim Brandwijk