Création et Compilation de Shaders

Écrit le 23/11/2004 par RedEyes
Dernière mise à jour : 29/04/2006

A. Introduction

Ce tutorial a pour but de vous expliquez comment créer un fichier de Batch pour compiler vos fichiers de textures *.tga (16, 24 ou 32bits), en fichier *.vtf afin de rendre vos textures lisible par le moteur de HL2.
Par la suite vous allez apprendre a créé très facilement, la grande majorité des Shaders (fichier *.vmt) qui vous serviront à créer votre Mod ou vos Maps perso.

B. Préparatifs

Créer un répertoire nommé "materialsrc" dans le répertoire de votre Mod ou de Half-Life 2 . C'est dans ce répertoire que vous devrez placez vos textures au format *.tga.
Vous pouvez organiser ce répertoire comme bon vous sembles, du moment que vous vous y retrouver par la suite.

Notez qu'il n'est pas nécessaire pour diffuser son Mod au publique de gamer addicted, d'inclure ce répertoire . Une fois que toutes les textures seront compilées vous pourrez vous débarrassez de se répertoire, à moins qu'il ne vous réserve à l'avenir.

Dans l'étape suivante, vous allez avec l'utilitaire "Vtex.exe" , apprendre comment on compile une texture *.tga que l'on a nommée "ma_texture_1.tga"

C. Conversion en fichier *.VTF

1- Création du fichier de Batch

Dans le répertoire suivant:

%chemin_de_steam%\SteamApps\utilisateur\sourcesdk\bin\

Créez un fichier texte que vous renommez "vtex.bat".

Éditez le fichier "vtex.bat" avec Notepad (clique droit > Modifier) et ajoutez ces lignes de commandes en prenant soin de remplacer %chemin_de_steam% par le bon chemin.

set VPROJECT=%chemin_de_steam%\SteamApps\utilisateur\Half-life 2\hl2\

vtex.exe -mkdir -shader LightmappedGeneric X:\%chemin_de_steam%\SteamApps\utilisateur\Half-life 2\hl2\materialsrc\mes_textures\ma_texture_1.tga

Sauvegardez votre Fichier *.bat dans le même répertoire que l'utilitaire et exécuter le fichier.

Une invite MS-DOS s'ouvre et si tout se passe bien, elle se referme aussitôt.
Les fichier *.vtf et *.vmt nouvellement créés devrai se trouver dans le répertoire " /Materials/ " désigné dans le VPROJECT.
Après la conversion, les fichiers se trouve dans le répertoire suivant :

%chemin_de_steam%\SteamApps\utilisateur\Half-life 2\hl2\materials\mes_textures\

2- Détails du fichier de batch

Voyons maintenant le détail de ces deux lignes de commandes.

set VPROJECT= %Chemin_du_Projet%

si vous créez ces textures pour "Half-Life 2 vous devrez déclarer ce chemin :

%chemin_de_steam%\SteamApps\utilisateur\Half-life 2\hl2\

pour votre Mod Half-Life 2 :

%chemin_de_steam%\SteamApps\utilisateur\Half-life 2\nom_du_mod

pour CS Source :

%chemin_de_steam%\SteamApps\utilisateur\counter-strike source\cstrike

pour votre Mod CS Source :

%chemin_de_steam%\SteamApps\utilisateur\counter-strike source\nom_du_mod

Note : Remplacez "utilisateur" par votre compte Steam

Passons à la commande suivante....

vtex.exe -mkdir -shader LightmappedGeneric X:\%chemin_de_steam%\SteamApps\utilisateur\Half-life 2\hl2\materialsrc\mes_textures\ma_texture_1.tga

La première partie de la commande (vtex.exe) exécute l'utilitaire de compilation du même nom.
Notez que si le fichier *.bat ne se trouve pas dans le même répertoire que l'utilitaire,il vous faudra indiquer le chemin complet.

-mkdir : Indique à l'utilitaire si il doit recréer la hiérarchie du répertoire "/materialsrc/" dans le répertoire "/materials/" du VPROJECT.

-shader : Indique le type de shaders. Il en existe plusieurs types, LightmappedGeneric, VertexLitGeneric et UnlitGeneric en sont les principaux.

Si vous devez créer un shader pour une Texture qui servira dans une map, vous devrez utiliser le shader "LightmappedGeneric".
Si vous souhaitez créer un shader pour un Objet (Fichiers MDL), vous devrez utiliser le shader "VertexLitGeneric".
"UnLitGeneric" servira plutôt à la création de Shader "Sprites".

Suivi du type de Shader, vous devez déclarer le chemin exact du fichier *.tga à compiler.
Dans notre exemple, il s'agit de la texture nommée "ma_texture_1.tga" qui se trouve dans le répertoire " /mes_textures/ "

Note :

Pour convertir plusieurs fichiers Tga en un seul coup, n'indiquez aucun nom de texture, et remplacez le nom de la texture en laissant l'extension du fichier qui doit être précédé d'une étoile ( /*.tga ).
Toutes les textures *.tga du répertoire désigné seront convertit en fichier *.vtf.

Exemple :

set VPROJECT=%chemin_de_steam%\SteamApps\utilisateur\Half-life 2\hl2\

vtex.exe -mkdir -shader LightmappedGeneric X:\%chemin_de_steam%\SteamApps\utilisateur\Half-life 2\hl2\materialsrc\mes_textures\*.tga

D. Configuration du Shader

Ouvrez le répertoire dans lequel ont été créé les fichiers *.vtf et *.vmt

%chemin_de_steam%\SteamApps\utilisateur\Half-life 2\hl2\materials\mes_textures\

Puis éditez le fichier "ma_texture_1.vmt" avec Notepad, pour examiner la constitution par défault du shader "LightmappedGeneric".

"LightmappedGeneric"
{
    "$basetexture"        "mes_textures/ma_texture_1"
}

$basetexture est le paramêtre pour charger une texture au format vtf.

Voila Vous savez maintenant comment on créé le plus simple des Shaders de texture . Il faut avouer que ceci n'est pas bien compliquera vous de savoir vous organisez.

E. Pour aller plus loin

Pour ajouter du Normal Mapping vous devrez ajoutez le paramètre $bumpmap

"LightmappedGeneric"
{
    "$basetexture"        "mes_textures/ma_texture_1"
    "$bumpmap"        "mes_textures/ma_texture_1_normal"
}

Vous devrez compiler la Normal Map en fichier *.vtf et effacez le fichier *.vmt qui l'accompagne après sa création.

Pour allez plus loin et donner des propriétés de surface déjà défini à votre Shader ajouter le paramètre $surfaceprops .

"LightmappedGeneric"
{
    "$basetexture"    "mes_textures/ma_texture_1"
    "$bumpmap"    "mes_textures/ma_texture_1_normal"
    "$surfaceprop"    "metal"
}

Il existe beaucoup de propriétés de surface en voici une liste :

- brick (Texture: Brique )
- canister (Objet : Boîte métallique )
- carpet (Texture: Tapisserie )
- chain (Texture; Chaîne en métal )
- concrete (Texture: Pierre )
- dirt (Texture: Saletés )
- flesh (Texture: Chaire )
- foliage (Texture: Feuillage )
- glass (Texture: Verre )
- glassbottle (Objet : Bouteille de Verre )
- gravel (Texture: Gravier )
- grenade (Objet : grenade )
- ice (Texture: Glace )
- ladder (Texture: Échelle )
- metal (Texture: Métal )
- metal_bouncy (Texture: Blindage )
- metal_box (Objet : Caisse métallique )
- metalgrate (Texture: Grille Métallique )
- metalpanel (Objet : Panneau en Métal )
- metalvent (Texture: Tôle )
- mud (Texture: Boue )
- paper (Texture: Papier )
- pottery (Objet : Céramique, vaisselle pots en terre,...)
- plaster (Texture: Plâtre )
- plastic (Texture: Plastique )
- rock (Texture: Rocher )
- rubber (Texture: Caoutchouc )
- sand (Texture: Sable )
- snow (Texture: Neige )
- slime (Texture: Matière visqueuse )
- slipperyslime (Texture: Matière visqueuse glissante)
- tile (Texture: Tuiles )
- water (Texture: Eau )
- wood (Texture: Bois )
- wood_crate (Objet : Caisse en bois )
- wood_funiture (Objet : Objet en Bois )
- wood_lowdensity (Texture: Bois de faible Densité)
- wood_panel (Objet : Panneau de Bois )
- wood_plank (Objet : Planches de bois )
- wood_solid (Objet : Bois incassable )

Pour créer des images "Décals" vous devrez utilisez le paramètre $decal

"LightmappedGeneric"
{
    "$translucent"    1     //Rend la canal alpha invisible
    "$basetexture"    "mes_textures/ma_texture_1"
    "$decal" 1
    "$decalscale"    0.50    //permet de resizer la texture    
}

F. Conclusion

Voila je pense qu'avec tout ceci vous en savez assez pour vous débrouiller à peu près tout seul à moins de vouloir créer de magnifique shaders comme on peu en voir dans HL²(shader d'eau, loupe, etc...).
Éditer les fichiers *.vmt de Hl² pour comprendre comment sont créer les shaders. Le $surfaceprop permet de vous faire gagner un temps précieux dans la création de vos matériaux, pensez donc à les utiliser.
Voila c'est a peu près tout pour cette fois ci.