Guides

Guide Théorique pour la création des textures FillPlane sur Farming Simulator 25

Ce guide a pour objectif de détailler la méthode de création des textures utilisées pour le rendu des tas de matériaux dans Farming Simulator 25, qu’ils soient affichés au sol ou à l’intérieur des bennes de véhicules. Il aborde l’ensemble du processus, depuis les principes liés aux textures, jusqu’à la configuration des fichiers XML, en incluant les outils nécessaires à chaque étape.

Ce document s’adresse à des utilisateurs disposant d’une base en modding et en traitement d’images, ainsi qu’à des personnes maîtrisant des notions liées aux fillType.
Un débutant peut suivre l’ensemble du guide, cependant certaines étapes demanderont probablement des recherches ou approfondissements complémentaires.
Certaines informations présentées, notamment celles concernant le canal Alpha de la Diffuse et la Displacement Map, proviennent d’analyses et de tests réalisés par la communauté. Le fonctionnement précis de certains paramètres n’étant pas encore entièrement documenté de manière officielle, ces éléments doivent être interprétés avec prudence.

Fonctionnement du shader

Ce shader ne se limite pas à l’affichage d’une simple image : il prend en charge la couleur, le relief, la perception de profondeur ainsi que le comportement visuel du matériau.
Pour obtenir un rendu cohérent et réaliste, le moteur GIANTS s’appuie sur deux technologies principales :

  • Triplanar Mapping : Projette la texture sur trois axes pour éviter les distorsions sur les pentes des tas.
  • Parallax Occlusion Mapping (POM) : Donne une illusion de profondeur et de porosité (les grains semblent s’empiler). Note : cet effet nécessite au moins un profil graphique « Medium ».

Logiciels indispensables pour la création de textures FillPlane

La création de textures pour Farming Simulator 25 ne nécessite pas obligatoirement l’utilisation de logiciels payants ou particulièrement complexes.
Deux solutions gratuites permettent de couvrir l’ensemble du workflow, depuis la génération automatisée des textures jusqu’au réglage précis des différents canaux.

Materialize : exploiter la génération automatique

Materialize est un outil spécialisé qui convertit une image simple en un ensemble complet de textures techniques. Il constitue le point de départ idéal pour apporter du relief et du réalisme à vos matériaux.

  • Son rôle dans ce guide : Materialize analyse les contrastes de votre image pour générer automatiquement la Normal Map, la Height Map et la Smoothness Map.
  • Pourquoi l’utiliser : Il permet d’obtenir une cohérence visuelle et un rendu immédiat.
  • Lien : Disponible gratuitement sur ici.
tuto materialize

GIMP : Le couteau suisse des canaux

Une fois les textures générées, GIMP sert à les « assembler » et à les préparer selon les exigences précises du shader de GIANTS.

  • Son rôle : Gérer la manipulation des canaux R, V, B et Alpha.
  • Fonction clé : Vous utiliserez principalement le menu Couleurs → Composants → Décomposer / Recomposer pour manipuler et organiser vos canaux.
  • Pourquoi l’utiliser : Pour le FillPlane Shader, vous devez souvent insérer des données spécifiques dans des canaux précis.
  • Lien : Disponible gratuitement sur gimp.org.

GIANTS Texture Tool : Le passage obligé

Même si vous travaillez en PNG, la conversion finale doit obligatoirement passer par l’outil officiel. Seul cet outil garantit que vos fichiers seront correctement convertis et conformes au format exact requis par le moteur du jeu.
Lien : Disponible gratuitement sur le GDN .

Les 5 Textures indispensables du FillPlane Shader

Chaque texture demande une configuration spécifique de 5 fichiers. Voici un récapitulatif technique de ces éléments :

La Diffuse Map (Couleur et Transitions)

  • Canaux R G B: Couleurs classiques rouge, vert, bleu.
  • Canal A : Donnée technique pour le lissage des bords du tas : ce n’est pas une transparence classique, mais une information brute utilisée par le shader. Son fonctionnement exact reste peu documenté. D’après nos tests, un gris à 128 constitue une bonne valeur par défaut. Si des artefacts visuels apparaissent lors de la rotation de la caméra, il est possible d’augmenter cette valeur jusqu’à 255. Pour les textures destinées à des andains, il convient de porter une attention particulière à ce canal.
  • Format : 1024×1024, export PNG 8bpc RGBA
tuto diffuse
L’image semble plus sombre en raison de la couche alpha.

La Normal Map RGB (Relief et Smoothness)

Attention, le canal Bleu est ici détourné pour la rugosité.

  • Canaux R & G : Direction X et Y de la normale.
  • Canal B (Smoothness) : Valeur entre 0 (mat/rugueux) et 255 (Brillant).
  • Format : 1024×1024, export PNG 8bpc RGB
tuto normal
La texture normale n’est plus bleue, comme nous en avons l’habitude, mais présente des nuances jaunes à cause d’une correction sur le canal bleu.

La Height Map (Parallax)

C’est elle qui donne l’effet de volume et de porosité aux grains. À utiliser avec modération, uune Height Map trop contrastée peut rendre le tas flou.

  • Canal unique (niveaux de gris) : Blanc = relief haut, Noir = creux (50% gris) = niveau neutre.
  • Ce qui compte : le delta (l’écart entre zones claires et sombres), pas les valeurs absolues. Garder une plage étroite et douce. (Exemple de références issu des textures du jeu : Orge 125–182, Colza 90–132)
  • Format : 512×512, export PNG Gris 8bpc.
tuto height
Il ne faut jamais trop contraster la Height Map. Dans cet exemple, elle commence à 100 et va jusqu’à 154.

La Displacement Map (Déplacement géométrique)

Contrairement à la Height Map qui est un effet purement visuel, la Displacement Map provoque un déplacement réel de la géométrie de la surface. Elle influence la forme physique du tas, pas seulement son apparence.
Il est fortement recommandé de réutiliser une displacement map existante depuis les données du jeu ($data/fillPlanes/). Vous pouvez utiliser barley_displacement.dds, qui est une texture neutre.

⚠️ Peu d’informations sont disponibles sur la façon dont le jeu interprète exactement cette texture. Les informations ci-dessous sont basées sur l’analyse des textures GIANTS de base et des tests communautaires. À prendre avec précaution.

  • Canal unique (niveaux de gris) : même logique que la Height Map, blanc = relief haut, noir = creux, 128 = neutre.
  • En pratique : une valeur uniforme de 127 convient dans la plupart des cas. Les textures GIANTS de base utilisent cette valeur neutre. Il est courant de réutiliser une displacement existante depuis les données du jeu.
  • Format : 32×32, export PNG Gris 8bpc.
tuto displacement
Pour l’exemple, nous allons prendre barley_displacement.dds, qui est une texture neutre.

La Distance Map (LOD vue de loin)

Texture utilisée quand le joueur est loin du tas. Le moteur remplace les textures détaillées par cette version simplifiée pour préserver les performances.

  • Canaux R, G, B : couleur simplifiée du matériau vue de loin. Les valeurs sont volontairement peu contrastées pour un rendu doux à distance.
  • Canal A : comme pour la Diffuse, ce canal n’est pas vide. Il contient vraisemblablement la même donnée de lissage de bord. Par défaut, une valeur de 128 est recommandée.
  • Format : 256×256, export PNG 8bpc RVBA.

Il est fortement recommandé de réutiliser une distance map existante depuis les données du jeu ($data/fillPlanes/distance/) dont la couleur est proche de votre matériau plutôt que d’en créer une depuis zéro.

TextureTailleFormatCanal RCanal GCanal BCanal A
Diffuse1024×1024RVBARougeVertBleuDonnée shader
Normal1024×1024RVBNormale xNormale YSmoothness/
Height512×512GRISHauteur///

Conversion avec GIANTS Texture Tool

Une fois vos fichiers PNG exportés depuis GIMP, vous devez les convertir au format .dds.
C’est un outil extrêmement simple : il vous suffit de faire un « Drag and Drop » (glisser-déposer) de vos fichiers textures directement sur TextureTools.exe.
Vos textures sont désormais prêtes à être intégrées dans votre map.

texture tools

Configuration des deux fichiers xml

L’ajout d’un nouveau fillType nécessite de configurer deux fichiers XML distincts. Le premier définit l’apparence visuelle du matériau, le second son comportement physique au sol.

fillTypes.xml

C’est ici que sont déclarées les cinq textures et tous les paramètres visuels du matériau. Chaque fillType dispose d’une balise <textures> avec les attributs suivants :

  • name : identifiant unique en majuscules, utilisé partout dans le jeu pour référencer ce fillType.
  • massPerLiter : masse volumique du matériau en kg/litre.
  • maxPhysicalSurfaceAngle : angle physique maximum avant glissement
  • diffuse : chemin vers la Diffuse Map.
  • normal : chemin vers la Normal Map.
  • height : chemin vers la Height Map.
  • displacement : chemin vers la Displacement Map. Il est possible de réutiliser une displacement existante depuis $data/fillPlanes/.
  • distance : chemin vers la Distance Map (LOD vue de loin). Il est possible de réutiliser une distance existante depuis $data/fillPlanes/distance/.
  • unitSize : taille de répétition de la texture sur la surface. blendContrast : contraste du mélange triplanar entre les trois projections. noiseScale : échelle du bruit de surface pour casser la répétition visuelle.
  • porosityAtZeroRoughness : porosité apparente quand la surface est lisse.
  • porosityAtFullRoughness : porosité apparente quand la surface est rugueuse.
  • displacementMaxHeight : hauteur maximum du déplacement géométrique en mètres.
  • firmness : dureté du matériau, impacte la physique de surface. viscosity : contrôle l’écoulement du matériau.

Exemple de code complet:

<fillType name="MONGRAIN" title="$l10n_fillType_mongrain"
    showOnPriceTable="true" isBulkType="true"
    unitShort="$l10n_unit_literShort">

    <physics massPerLiter="0.50" maxPhysicalSurfaceAngle="15"/>

    <economy pricePerLiter="0.532">
        <factors>
            <factor period="1" value="1.00"/>
            ...
            <factor period="12" value="1.00"/>
        </factors>
    </economy>

    <image hud="$dataS/menu/hud/fillTypes/hud_fill_mongrain.png"/>
 
    <textures
        diffuse     ="maps/fillPlanes/mongrain_diffuse.dds"
        normal      ="maps/fillPlanes/mongrain_normal.png"
        height      ="maps/fillPlanes/mongrain_height.png"
        displacement="$data/fillPlanes/oat_displacement.png"
        distance    ="$data/fillPlanes/distance/oatDistance_diffuse.png"
        unitSize="0.5" blendContrast="0.2" noiseScale="0.5"
        porosityAtZeroRoughness="0.9" porosityAtFullRoughness="1"
        displacementMaxHeight="0.2" firmness="0.3" viscosity="0.5"/>

</fillType>

densityMapHeightTypes.xml

Ce fichier définit le comportement physique de chaque tas au sol : son angle de pente, son volume, sa collision. Chaque matériau doit y avoir une entrée.

  • fillTypeName : nom du fillType, doit correspondre exactement au nom déclaré dans maps_fillTypes.xml.
  • maxSurfaceAngle : angle maximum de la pente avant que le matériau glisse (en degrés). À titre de référence : grain = 26°, légumes = 34°, paille et andains = 35°, matériaux légers = 40°.
  • fillToGroundScale : échelle de volume au sol. La valeur 1.0 est standard pour le grain. La paille et les andains utilisent 6.0 ou 7.0 car ils prennent beaucoup plus de volume.
  • allowsSmoothing : autorise le lissage de la surface du tas (true/false).
  • canBeTipped : si false, le matériau ne peut pas être déversé au sol. À utiliser pour les matériaux qui ne se déposent pas naturellement en tas (olives, épinards, liquides).

Attributs de collision :

  • scale : échelle de la collision physique.
  • baseOffset : décalage de base de la surface de collision en mètres.
  • minOffset / maxOffset : plage de hauteur minimale et maximale de la collision.

Exemple de code complet:

<densityMapHeightType fillTypeName="MONGRAIN"
    maxSurfaceAngle="26"
    fillToGroundScale="1.0"
    allowsSmoothing="false">
    <collision scale="1.0" baseOffset="0.08" minOffset="0.0" maxOffset="0.08"/>
</densityMapHeightType>

Mise en pratique

  • Trouvez ou créez une texture diffuse. La texture doit impérativement être seamless (sans couture), c’est-à-dire qu’elle doit se répéter sans jointure visible sur la surface du tas. Une texture non seamless créera des raccords disgracieux, très visibles en jeu.
  • Importez la diffuse dans Materialize afin de générer automatiquement la Normal Map et la Height Map. Certains sites internet proposent des packs de textures avec la Normal et la Height déjà incluses.
  • Dans Gimp, importez la texture diffuse, ajoutez un canal alpha, puis fusionnez avec le calque principal. Décomposez ensuite l’image en RVBA (Rouge, Vert, Bleu, Alpha).
  • Remplir le canal A avec un gris uniforme de valeur 128 comme point de départ, puis recomposer en RVBA.
  • Exporter votre texture _diffuse en .png 8bpc RGBA. (1024×1024 px)
  • Importez la Normal Map, décomposez-la en RVB et modifiez la couche bleue (0 pour un rendu mat jusqu’à 255 pour plus de brillance). Recomposer en RVB.
  • Exporter votre texture _normal en .png 8bpc RGBA. (1024×1024 px)
  • Importez la Height map et exporter votre texture _height en .png Gris 8bpc. (512×512 px)
  • Importez la Displacement map et exporter votre texture _displacement en .png Gris 8bpc. (32x32px)
  • Sélectionnez vos textures et déposez-les sur TextureTools.exe. Attendez bien que le message indiquant que l’export est terminé apparaisse.
  • Vos textures sont maintenant prêtes à être utilisées sur votre carte.

La création de textures pour le FillPlane Shader est un processus technique qui demande de la rigueur, mais qui reste accessible avec les bons outils et les bonnes informations. En respectant les spécifications de chaque texture, format, taille, canaux et valeurs le rendu en jeu sera cohérent avec les matériaux natifs de Farming Simulator 25.
Ce guide est le fruit d’analyses des textures GIANTS de base, d’échanges avec des intégrateurs de la communauté et de tests en jeu. Certaines informations, notamment sur le canal A de la Diffuse et la Displacement Map, restent partielles faute de documentation officielle complète.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *