Environment mapping

 
 
Un effet très spectaculaire c'est l'environment mapping, c'est à dire qu'une surface va devenir plus ou moins réfléchissante à la manière d'un mirroir.
Par exemple des fenêtres vont donner des reflets, une surface métallique polie va briller, un carrelage mouillé va réfléchir ce qui l'entoure.
 
Ci-dessous le fichier VMT :
 
"LightmappedGeneric"
{
"$basetexture" "Brick/brickwall045c"
"$surfaceprop" "brick"
"$envmap" "env_cubemap"
"$basealphaenvmapmask" 1
"$envmapcontrast" 1
"$envmapsaturation" 1
"$envmaptint" "[ .6 .6 .6]"
}

 
envmap env_cubemap signifie que l'environment mapping va se baser sur l'entité env_cubemap pour savoir ce qui doit être refléchi.
Le Source Engine va rechercher l' env_cubemap le plus proche pour connaître l'environement à refléchir. L'entité env_cubemap va en sorte servir de caméra sur 360°.
 
ATTENTION : Il ne faudra pas oublier de palcer des entités env_cubemap dans la map et de lancer la commande buildcubemaps dans la console, sinon le résultat ne sera pas bon du tout, l'environnement reflété ne correspondra pas à la réalité!!!
 
Le paramètre basealphaenvmapmask 1 signifie que l'environment mapping sera appliqué sur la texture selon la couche alpha de l'image de base.
 
envmapcontrast 1 signifie que les réflexions seront plus contrastées
 
envmapsaturation 1 signifie qu'on va agir sur la saturation, la valeur va de 0 à 1 ou peut être décomposée en un vecteur RGB [ 1 1 1 ]
 
envmaptint [ .6 .6 .6 ] signifie qu'on va agir sur la couleur des reflets
 
Ci dessus la texture de base
 
Ci-dessus la couche alpha uniquement de cette texture
 
En regardant les deux images on comprend vite comment ça marche, l'environment mapping est appliqué uniquement dans les zones transparentes de la couche alpha.
 
Les autres moyens d'obtenir un masque d'environment mapping :
 
On peut également utiliser une image différente pour le masque de l'environment mapping, on aura alors :
 
"$envmapmask" "Brick/brickwall045c_mask"
 
Une autre possibilité est d'utiliser la couche alpha de l'image de normal mapping si cette image existe. On utilise cette méthode si la couche alpha de la texture de base est déjà utilisée pour un autre effet comme la transparence.
On aura alors le paramètre suivant :
 
"$normalmapalphaenvmapmask" 1
 
 
Un exemple de matériau qui utilise une image séparée pour le masque :
 
"LightmappedGeneric"
{
"$basetexture" "Building_Template/Building_Trainstation_Template001a"
"$surfaceprop" "glass"
"$translucent" 1
"$envmapmask" "Building_Template/Building_Trainstation_Template001a_mask"
"$envmaptint" "[ 0.5 0.5 0.5 ]"
"LightmappedGeneric_DX8"
{
"$envmaptint" "[.15 .15 .15]"
}
"$envmap" "env_cubemap"
"$envmapcontrast" 1
"$envmapsaturation" 1
}

 
translucent 1 signifie que la texture est transparente et va utiliser la couche alpha comme masque de transparence.
 
C'est une grande baie vitrée avec des verres sales à moitié transparents. La couche alpha est utilisée pour la transparence, comme il n'y a pas de normal map pour cette texture, on va utiliser un fichier indépendant pour le masque.
 
Ci-dessus l'image de base pour la texture
 
La couche alpha de l'image de base
 
L'image de masque utilisée pour l'environment mapping