[INFO] Le texturing sur Arma


Ce topic vous aidera à comprendre le fonctionnement des textures dans Arma 3 et à assimiler les différents termes liés au texturing. Considérez ce post comme une sorte de fiche Wiki en français. Ce n’est pas un tuto, c’est une banque d’informations.


Ce sujet sera maintenu à jour et des ajouts seront faits régulièrement. Certaines informations ont volontairement été retirées car elles ne sont pas pertinentes. Si vous souhaitez plus d’informations au sujet de ce topic ou si vous avez des questions, vous pouvez me l’indiquer. Je peux aussi préparer des tutoriels spécifiques aux points demandés.


Avant de se concentrer sur la partie qui nous intéresse, il est important de retracer l’évolution d’Arma et des technologies utilisées. Arma 3, sorti en 2013, est basé sur le moteur de jeu maison Real Virtuality 4 de Bohemia Interactive. La première version du moteur a été conçue en 2000, RV devait être un moteur flexible et à la pointe de la technologie, permettant la création d’open world et de jeux sandbox massifs en solo comme en multijoueur – il sera utilisé par Operation Flashpoint dans sa version originale (plus tard renommé en Arma Cold War Crisis suite au rachat de la marque Operation Flashpoint par Codemaster) puis réutilisé pour chaque opus de la saga Arma. Il est aussi le moteur de jeu d’Iron Front et les simulateurs VBS2 et VBS3, utilisés par les armées de 128 pays du monde. Le moteur est tenu à jour depuis sa création pour permettre de suivre au mieux les avancées technologiques mais ne sera plus maintenu pour les jeux Arma dans le futur (Enfusion étant le successeur). Arma 3 se base sur Real Virtuality 4, dernière version qui va donc conclure le cycle de vie de ce moteur ayant déjà 19 ans !

Maintenant que nous avons rapidement parlé de RV4 et d’Arma, nous allons rentrer dans le vif du sujet, le texturing sur Arma.



Real Virtuality dispose de ses propres textures maps, regroupant parfois plusieurs maps (que l’on peut aussi appeler couches dans notre cas) parfois disponibles indépendamment sur d’autres moteurs.

Il est très important d’utiliser les suffixes listés ci-dessous, le moteur et ses outils se basent sur ces appellations pour fonctionner correctement. On utilisera donc jamais de texture nommée “bois.paa” mais plutôt “bois_co.paa”.


ColorMap / Diffuse (_CA _CO)

C’est la Diffuse (ou Color Map), la « couleur » principale affichée par le modèle.

La ColorMap de RV4 gère la transparence (Alpha) grâce au suffixe _ca. Pour empêcher la prise en compte de l’Alpha, on utilise le suffixe _co.

_ca ne fonctionne qu’à partir d’un fichier PNG 8bits ou TGA 32bits converti depuis TexView2 ou ImagetoPAA.
_co est utilisé globalement. La source peut être un fichier PNG 8bits ou TGA 24 bits.

Exemple d’un nom de color map : bois_ca.paa ou bois_co.paa


Normal Map (_NOHQ _NOPX)

Permet d’accentuer/détailler l’objet en simulant un relief.

_NOHQ = Normal Map haute qualité (jusqu’à 4096 pixels).
_NOPX = Normal map utilisée pour les terrains (parallax mapping)

Exemple d’un nom de normal map : bois_nohq.paa

texture="#(argb,8,8,3)color(0.5,0.5,1,1)";


Detail Map (_DT)

Affine la qualité générale de la Diffuse. Principalement utilisée sur de grandes surfaces.

Exemple d’un nom de normal map : bois_dt.paa

texture="#(argb,8,8,3)color(0.5,0.5,0.5,0)";


Specular Map (_SMDI)

Détermine la brillance et les points d’accentuation de la texture.

Elle peut être générée à partir de Substance Painter, Photoshop CS3 ou directement via le filtre revertSpecularMapFinish sur TexView2.

Exemple d’un nom de normal map : bois_smdi.paa


Light Map (_AS)

Appelée Ambiant Shadow, détermine l’importance et le marquage de l’ombrage. Composé d’une AO.


Chacune de ces maps est à utiliser afin de rendre le modèle précis, détaillé et réaliste (si le réalisme est votre objectif).



La résolution d’une texture impacte la qualité de l’objet, le temps de chargement du jeu, la charge GPU et le rendu. Plus la résolution est élevée, plus l’objet pourra être détaillé, plus cela impactera négativement les performances du joueur. Moins la résolution est élevée, mois l’objet sera détaillé, moins les performances seront impactées. On utilise des multiples de 2 pour déterminer les résolutions de textures.

Pour avoir des performances équilibrées pour tous les joueurs, il est donc important de déterminer l’utilité d’une résolution de texture selon le modèle.

Un billet de banque n’aura pas besoin d’avoir la même résolution que les murs extérieurs d’un bâtiment et il est préférable d’adapter la résolution de ses textures plutot que de mettre du 2048px partout.

Les résolutions les plus couramment utilisées sont les suivantes :

  • 32x32 / 64x64 / 128x128 / 256x256 : Icons/Markers
  • 512x512 : Accessoires
  • 1024x1024 : Certains éléments de bâtiments, petits objets, accessoires d’arme
  • 2048x2048 : Bâtiments (murs/portes), véhicules et armes – Définition standard
  • 4096x4096 : Terrains,bâtiments (murs/portes), véhicules et armes – Définition élevée.

Pour la plupart des objets, bâtiments et véhicules, on préfèrera des textures en 2048x2048 pour un rendu optimal en jeu. La résolution 4K peut être utilisée pour les murs des bâtiments, les armes et certains objets utilitaires mais n’est pas conseillée pour son poids, son impact ni pour sa flexibilité.

Real Virtuality adapte automatiquement les résolutions selon les paramètres graphiques du joueur. Ci-dessous, les détails de la résolution selon le paramètres graphique joueur :

Faible : jusqu’à 512px
Normal : jusqu’à 1024px
Elevé/ Très élevé : jusqu’à 2048px
Ultra : jusqu’à 4096px

Malgré une résolution personnalisée, une texture 4K impactera tout de même les chargements du joueur et la charge GPU (VRAM). Un joueur n’utilisant pas la qualité de Texture “Ultra” ne pourra pas avoir nativement d’affichage 4K et aura à la place une MIP map 2048 de moindre qualité. C’est principalement pour cette raison que l’on utilise en priorité des textures en 2048px.

La résolution de vos textures combinée aux presets graphiques en jeu impactent la charge sur votre VRAM. Si vous jouez en Ultra avec des textures en 4096, il n’est pas impossible que vous atteignez 7Go de VRAM utilisée. Si votre GPU ne dispose pas de VRAM suffisante, le jeu s’occupe de vous générer des MIP maps de moindre de qualité.

Notez que vous pouvez faire des textures en 4096 et travailler sur des MIP maps personnalisées via Photoshop/Gimp/Affinity.



RV4 et Arma 3 supportent certains formats classiques (PNG/TGA/JPG/JPEG) mais utilisent nativement deux formats maison pour les textures : PAA et PAC.

Les deux formats avaient une utilité précise pour Arma 2 mais Arma 3 traites les deux de manière identique. La conversion en PAA/PAC se fait via des logiciels fournis dans le kit de développement BI : TexView2 et ImageToPAA

On utilise TexView2 pour la conversion rapide, pour une texture OneShot ou pour appliquer un filtre particulier à l’image.

On utilise ImageToPAA pour le reste. Il existe un plugin Photoshop CS3 pour traiter les images au format PAA.

Les logiciels BI reconnaissent les formats sources suivants : Jpeg, PNG(RBG/A), TGA (RBG 24 bit – RGBA 32 bit), PAC, PAA.

Les autres formats ne sont soit pas pris en charge, soit pas adaptés.

Le PAA supporte l’utilisation de transparence. Pour cela, vous devez utiliser des fichiers d’origines en TGA (RBGA) 32 bits non compressés ou PNG 8 bits.



Arma dispose de ses particularités au niveau des matériaux. Quand on parle de RVMAT, on fait référence donc au système maison pour gérer les matériaux sur Arma. Un matériau, c’est ce qui détermine les propriétés/spécificités d’un objet, à savoir : sa couleur, sa réflexion, ses détails.

Le RVMAT (Real Virtuality Material) est un fichier config lié au modèle 3D. Il nécessite d’utiliser l’extension .rvmat afin de fonctionner.

Pour lier ce fichier au modèle 3D, il faut passer par le logiciel Object Builder (Oxygen 2) puis assigner le RVMAT en tant que matériau dans l’onglet « Faces ». Le RVMAT est baked avec le modèle 3D lors de la binarisation.

Infos supplémentaires :
Le baking consiste à un inclure les détails d’une texture dans un modèle.
La binarisation est un processus d’optimisation.

Exemple de RVMAT :

ambient[] = {1,1,1,1};
diffuse[] = {1,1,1,1};
forcedDiffuse[] = {0,0,0,0};
emmisive[] = {0,0,0,1};
specular[] = {0.4,0.4,0.4,1};
specularPower = 50;
PixelShaderID = "Super";
VertexShaderID = "Super";

class Stage1 {
	texture = "exemple_source\exemple_arme\data\bois_co.paa";
	uvSource = "tex";

	class uvTransform {
		aside[] = {1, 0, 0};
		up[] = {0, 1, 0};
		dir[] = {0, 0, 0};
		pos[] = {0, 0, 0};
	};
};

class Stage2 {
	texture = "#(argb,8,8,3)color(0.5,0.5,0.5,0.5,DT)";
	uvSource = "tex";

	class uvTransform {
		aside[] = {1, 0, 0};
		up[] = {0, 1, 0};
		dir[] = {0, 0, 0};
		pos[] = {0, 0, 0};
	};
};

class Stage3 {
	texture = "#(argb,8,8,3)color(0,0,0,0,MC)";
	uvSource = "tex";

	class uvTransform {
		aside[] = {1, 0, 0};
		up[] = {0, 1, 0};
		dir[] = {0, 0, 0};
		pos[] = {0, 0, 0};
	};
};

class Stage4 {
	texture = "exemple_source\exemple_arme\data\bois_as.paa";
	uvSource = "tex";

	class uvTransform {
		aside[] = {1, 0, 0};
		up[] = {0, 1, 0};
		dir[] = {0, 0, 0};
		pos[] = {0, 0, 0};
	};
};

class Stage5 {
	texture = "exemple_source\exemple_arme\data\bois_smdi.paa";
	uvSource = "tex";

	class uvTransform {
		aside[] = {1, 0, 0};
		up[] = {0, 1, 0};
		dir[] = {0, 0, 0};
		pos[] = {0, 0, 0};
	};
};

class Stage6 {
	texture = "#(ai,32,128,1)fresnel(0.6,0.6)";
	uvSource = "none";
};

class Stage7 {
	texture = "a3\data_f\env_land_co.paa";
	uvSource = "tex";

	class uvTransform {
		aside[] = {1, 0, 0};
		up[] = {0, 1, 0};
		dir[] = {0, 0, 0};
		pos[] = {0, 0, 0};
	};
};


Les stages du RVMAT

Les stages sont les couches qui composent un matériau. On utilise un mélange de vertex et de pixel shaders. Les stages sont spécifiques à chaque shader et changent selon ceux qui sont choisis. Un shader, c’est de manière basique et très peu précise ce qui s’occupe du rendu en jeu.

Le shader le plus communément utilisé sur Arma est “Super”. Il est composé de 7 stages et est le plus flexible de tous lorsqu’il s’agit de créer un bâtiment, un véhicule ou encore un Item. C’est le shader utilisé majoritairement chez Projets Edaly mais d’autres peuvent être plus adaptés à la situation. Le shader Water s’utilise par exemple pour des liquides de toute sorte.

Composition d’un RVMAT utilisant le shader Super.

  • Stage 1 : Normal Map (suffixe _nohq)
  • Stage 2 : Detail Map (suffixe _dt)
  • Stage 3 : Macro Map (suffixe _mc)
  • Stage 4 : Ambient Shadow Map (suffixe _as)
  • Stage 5 : Specular Map Diffuse Inverse (suffixe _smdi)
  • Stage 6 : Fresnel (génération procédurale)
  • Stage 7 : Environment Map (réflexion de l’environnement)


Les détails de l’utilité des shaders listés ci-dessous est disponible ici.

Pixel shaders :

AlphaNoShadow
AlphaShadow
Detail
DetailMacroAS
Grass
Interpolation
Normal
NormalDXTA
NormalMap
NormalMapDetailMacroASSpecularDIMap
NormalMapDetailMacroASSpecularMap
NormalMapDetailSpecularDIMap
NormalMapDetailSpecularMap
NormalMapDiffuse
NormalMapDiffuseMacroAS
NormalMapGrass
NormalMapMacroAS
NormalMapMacroASSpecularDIMap
NormalMapMacroASSpecularMap
NormalMapSpecularDIMap
NormalMapSpecularMap
NormalMapSpecularThrough
NormalMapThrough
Refract
SpriteRefract
Terrain
Water
WaterSimple
White
WhiteAlpha


Vertex shaders :

Basic
BasicAlpha
NormalMap
NormalMapAlpha
NormalMapAS
NormalMapDiffuse
NormalMapDiffuseAlpha
NormalMapDiffuseAS
NormalMapSpecularThrough
NormalMapSpecularThroughNoFade
NormalMapThrough
NormalMapThroughNoFade
Point
ShadowVolume
Sprite
Super
Terrain
TerrainAlpha
Water
WaterSimple



La suite de logiciels Substance est l’ami idéal de l’artiste 3D dans le Jeu Vidéo. Painter est un logiciel payant de texturing 3D. Il vous permet d’ouvrir un modèle 3D et de peindre en temps réel en 2D et en 3D sur celui-ci. C’est un outil puissant et pratique qui vous permet de réaliser les textures de vos modèles plus rapidement mais aussi plus précisément.


Substance Painter

Vous pouvez utiliser Substance Painter pour texturer vos objets Arma 3 en le configurant correctement. Je vous mets ci-dessous les liens de téléchargement de mes parametres d’exportation pour Arma 3 ainsi que le lien vers le shader Arma 3. De cette manière, vous pourrez travailler de manière confortable.

Infos complémentaires :

Le fichier Arma_3.spexp se met dans : Allegorithmic\Substance Painter\shelf\export-presets

Le fichier du shader se met à la racine de : Allegorithmic\Substance Painter\shelf\shaders

Liens de téléchargement :

Lien vers le shader Arma 3 pour Painter : https://github.com/ianbanks/arma_3_substance_shader

Lien de téléchargement des paramètres d’exportation Painter pour Arma 3 : https://cdn.discordapp.com/attachments/360671450585235458/597026468043948042/Arma_3.spexp

Image des paramètres d’exportation :


Substance Designer

Vous pouvez aussi utiliser Substance Designer pour créer vos matériaux de zéro. Cela vous permet notamment de créer des matériaux procéduraux qui pourront s’adapter à plusieurs travaux. Substance Designer demande un peu plus de concentration afin d’être maitrisé. Les matériaux créés dans Designer peuvent être importés et appliqués dans Substance Painter.


Substance B2M

Substance B2M3 est un outil très pratique lorsqu’il s’agit de générer des normals à partir d’un fichier Bitmap. Il vous permet par exemple d’importer votre bois_co.png et de générer automatiquement une normal map idéale pour Arma.

5 J'aimes

Seigneur merci un wiki français correct bourré de bonnes informations et d’astuces :smiling_face_with_three_hearts:

Les moddeurs français n’ont plus d’excuses pour ne pas fournir de la qualité au moins sur les textures !

2 J'aimes

Super propre !
Juste un petit détail :

C’est pas des multiples de 2 mais des puissance de 2 :stuck_out_tongue:

2 J'aimes

Oh punaise, quelle quiche, merci ! x)

Possible d’épingler stp ? :slight_smile:

Si, leur faignantise !

1 J'aime

C’est justement pour ça qu’ils n’ont plus d’excuses :rofl:

Ca leur donnera une excuse pour faire des models qui boufferont encore plus de ressources !!! :smiley:

2 J'aimes

Ils vont tout mettre en full 4K, PC MASTER RACE ! x)

Comme les serveurs vanilla qui mettent des textures 4k pour des panneaux d’affichage ? :upside_down_face:

@Moonie, est ce qu Allegorithmic te donne un petit pecule pour la pub ?? On voie la fanatique !!

1 J'aime

Je fais de mon mieux pour ne pas mettre en avant mon coté fangirl. xD