SourceEngine Détails de texture (herbes, plantes, ...)

  • Initiateur de la discussion
  • Administration
Seb

Seb

El Dictator
Membre du Staff
Messages
1 875
Score réaction
454
Points
370
Ce tutorial réalisé entièrement par Dawa et provient des archives de mapping-area et modding-area.
Les archives sont anciennes, certains tutoriels peuvent ne plus correspondre aux dernière versions.


-

Auteur : Dawa.
Niveau : Moyen.
Attention, c'est long, mais je crois que j'ai tout dit !

Qu'est ce que c'est ?

Une texture peut contenir un élément de détail. Vous connaissez certainement les textures de mélange (blend), mais elle peuvent en plus contenir des sprites, des modèles placés aléatoirement à la compilation.

L'exemple le plus courant dans HL2 est l'application d'herbes.


Comment cela fonctionne ?

Un fichier nommé "detail.vbsp" doit se trouver à la racine du mod. Par exemple : "half-life 2\hl2" ou encore "counter-strike source\cstrike".
Ce fichier est uniquement utilisé par le compilateur. Pas besoin donc de le publier avec votre map (BSP). Une fois la compilation réalisée les éléments de détails seront inscrits aléatoirement dans votre map (BSP).

Chaque paragraphe présent dans ce fichier fait référence à un nom qui est utilisé dans le vmt d'une texture. Il contient différents paramètres.
Ce fichier, dans HL2, est trés fourni et pourra vous servir de base. Par contre, sous cstrike, il ne contient que deux paragraphes pour prodigy et compound...


Application à Counter Strike

En effet, autant l'utilisation d'une texture sous HL2 pourra créer ces fameuses herbes, autant la même texture sous CS ne fournira rien
Prenons le cas de la texture "blendrockgrass004a", texture HL2.

Je créé un bloc sous CS, j'applique cette texture, et ? rien, pas d'herbes.
Je consulte le vmt de la texture qui contient ceci :
"WorldVertexTransition"
{
"$basetexture" "nature/rockfloor005a"
"$basetexture2" "nature/dirtfloor006a"
"%tooltexture" "nature/blendrockgrass004a_tooltexture"
"$basetexturetransform" "center .5 .5 scale 1 1 rotate 0 translate 0 0"
"$basetexturetransform2" "center .5 .5 scale 1 1 rotate 10 translate 0 0"
"%detailtype" "coastline_redgrass01"
"$surfaceprop" "dirt"
"%keywords" "coastline"
"$bumpmap" "nature/rockfloor005a_normal"
}
Ce qui est interressant ici est la ligne :
"%detailtype" "coastline_redgrass01"
La texture utilisera le paragraphe nommé "coastline_redgrass01" comme référence pour construire les détails sur cette texture.

Je consulte le fichier "detail.vbsp" présent sous "half-life 2\hl2" et je me rend au paragraphe "coastline_redgrass01", je trouve ceci :
coastline_redgrass01
{
"density" "600.0"

Group1
{
"alpha" "1"
Model1
{
"sprite" "288 0 128 128 512"
"spritesize" "0.5 0.0 19 25"
"spriterandomscale" "0.2"
"amount" "0.2"
"detailOrientation" "2"
}
Model2
{
"sprite" "0 0 128 128 512"
"spritesize" "0.5 0.0 23 30"
"spriterandomscale" "0.2"
"amount" "0.1"
"detailOrientation" "2"
}
Model3
{
"sprite" "144 0 128 128 512"
"spritesize" "0.5 0.0 15 15"
"spriterandomscale" "0.2"
"amount" "0.15"
"detailOrientation" "2"
}
Model4
{
"sprite" "144 144 128 128 512"
"spritesize" "0.5 0.0 18 21"
"spriterandomscale" "0.2"
"amount" "0.2"
"detailOrientation" "2"
}
Model5
{
"sprite" "144 288 128 128 512"
"spritesize" "0.5 0.0 38 38"
"spriterandomscale" "0.2"
"amount" "0.2"
"detailOrientation" "2"
}
Model6
{
"sprite" "0 288 128 128 512"
"spritesize" "0.5 0.0 23 23"
"spriterandomscale" "0.2"
"amount" "0.1"
"detailOrientation" "2"
}
Model7
{
"sprite" "288 288 128 128 512"
"spritesize" "0.5 0.0 42 42"
"spriterandomscale" "0.2"
"amount" "0.1"
"detailOrientation" "2"
}
}

Group2
{

"alpha" "0.0"
}
}
Oulà compliqué me direz-vous ! Pas tant que ça.
Je copie ce bloc dans mon fichier "detail.vbsp" présent sous "counter-strike source\cstrike", je recompile ma map et hop, magie, mes herbes ont poussées. Promis je n'ai pas ajouté d'engrais,


Détails internes

La texture utilisée par HL2 et CSS pour les détails est la texture nomée "detailsprites.vtf" présente dans le cache "source materials.gcf" à l'endroit suivant "Hl2/materials/Detail".

La voici :

detailsprites.jpg



On remarque donc 9 sprites d'herbes réparties sur une image. Chaque image d'herbe est présente dans un carré de 128x128 pixels (c'est important).


Paramétrage

Ca se complique un peu, mais ça devrait aller...
Voici le paramétrage que j'ai appliqué à une map CSS :
coastline_redgrass01
{
"density" "300.0"

Group1
{
"alpha" "1"
Model1
{
"sprite" "288 288 128 128 512"
"spritesize" "0.5 0.0 15 15"
"spriterandomscale" "0.2"
"amount" "0.4"
"detailOrientation" "2"
}
Model2
{
"sprite" "144 288 128 128 512"
"spritesize" "0.5 0.0 18 21"
"spriterandomscale" "0.2"
"amount" "0.1"
"detailOrientation" "2"
}
}

Group2
{

"alpha" "0.0"
}
}
"density" "300.0" : correspond à la densité d'herbe présente sur votre texture. Plus vous augmentez ce chiffre, plus il y aura d'herbe. Vous remarquerez que j'ai réduit de moitié la densité par rapport à HL2, en multijoueur il faut penser à tout...Ce chiffre est global à tous les sprites pour la texture nomée.
"sprite" "288 288 128 128 512" : ce sont les coordonnées de l'image que j'ai choisi. Explications, on défini le premier point an haut à gauche : 288, 288. 128, 128 sont la largeur et la hauteur de l'image, 512 la taille globale de la texture.


Choisissez une texture d'herbe, puis :

"spritesize" "0.5 0.0 15 15" : hé ! la taille du sprite, je vous laisse jouer avec.
"spriterandomscale" "0.2" et "amount" "0.4" : définisse les facteurs pour le placement aléatoire. Ils peuvent être définis différement par sprites (contrairement à density).
"detailOrientation" "2" : bin l'orientation, mais je n'en sais pas plus...

Puis j'ai choisi un deuxième type d'herbe pour la même texture, mais les touffes d'herbes seront moins nombreuses (amout 0.1).

Il est également possible d'utiliser des models au lieu de ces sprites, mais là inutile de vous dire que cela a une influence sur les performances. Cela dit prodigy en utilise :

"model" "models/props/de_prodigy/prodgrassa.mdl"

Personnalisation

Bin sûr, le prolongement de ceci est : "Bin c'est cool, mais je veux faire mes propres herbes moi !".
Yes, effectivement, je n'ai pas eu le temps de tester donc ce qui suit est de la pure théorie.

Créer une texture suivant le format de la texture detailsprites.vtf.
La placer dans le répertoire "materials/Detail". Compiler, cela doit fonctionner.

Par contre, si vous distribuez votre map avec ce fichier, cela prendra effet pour toutes les maps, je doute que les joueurs apprécient que vous modifiez prodigy et compound ...
Donc l'idée est d'intégrer cette texture grâce à BSPZip dans votre BSP. De cette manière votre texture perso sera chargée au lancement de votre map, mais n'influera pas sur les autres maps.

FIN !!!

Merci de signaler les anomalies, parce que ce fut rude,
Dawa.
 
Discord Hytale, Minecraft, Rust, ARK, FiveM

Découvrez mTxServ!

Discord d'entraide

Rejoignz-nous sur Discord