Lorsqu'on souhaite créer un nouvel effet il est souvent pratique de démarrer à partir d'un modèle. Dans la catégorie de node EX9.Effect, vous pourrez trouver Template (EX9.Effect) qui constitue une bonne base de départ. Il contient la structure d'effet basique et implémente un vertex shader et un pixel shader élémentaires. Dans les faits, c'est un shading constant avec une texture simple.
Ce modèle est organisé en quatre sections:
La section Paramètres commence par déclarer les matrices de transformation les plus courantes grâce aux sémantiques. Notez que la variable tW, qui est déclarée avec la sémantique WORLD, apparaît sous la forme d'un pin sur l'effet, ce qui n'est pas le cas des autres transformations. Les sémantiques VIEW et PROJECTION assignent leur matrice respective aux matrices tV et tP par les pins view et projection du Renderer (EX9).
Puis cette section déclare une texture et un sampler, auquel est assignée la texture. Le dernier paramètre est la matrice de transformation de texture.
Pour chaque effet, vous devez également spécifier quelles données vous souhaitez transférer du vertex shader vers le pixel shader sous forme de paramètre. C'est ce que l'on fait grâce à une structure:
{CODE(ln=>0)}
struct vs2ps
{
float4 Pos : POSITION; float2 TexCd : TEXCOORD0;
};
^
Notez que cette structure est réutilisée comme paramètre pour la fonction vertex shader:
vs2ps VS(float4 PosO : POSITION, float4 TexCd : TEXCOORD0) {..}
mais également comme paramètre d'entrée pour la fonction pixel shader:
float4 PS(vs2ps In): COLOR {..}
Il n'est pas nécessaire d'utiliser une structure comme celle-ci. Vous pouvez ajouter des paramètres additionnels selon votre souhait.
Dans ce simple exemple, la structure ne contient que 2 types de valeurs: les vecteurs de position et de coordonnées de texture. Pour un effet réaliste, vous voudrez certainement passer d'avantage d'informations aux vertex shader et au pixel shader.
Le vertex shader du modèle ne fait pas grand chose. Il remplit seulement la structure de sortie avec les positions de vertex actuelles dans l'espace de projection:
Out.Pos = mul(PosO, tWVP);
et les coordonnées de texture de vertex actuelles, transformées via la matrice de transformation de texture entrante:
Out.TexCd = mul(TexCd, tTex);
La fonction pixel shader est encore plus simple. Elle prend les coordonnées de texture entrante pour un pixel donné, puis renvoie la couleur de sampler Samp à cette même position.
Le modèle d'effet spécifie 2 techniques. TSimpleShader est la version cool, celle qui utilise les fonctions du shader. L'autre est moins intéressante car elle n'utilise que des instructions de fonction fixe, ce dont vous n'aurez probablement jamais besoin.
anonymous user login
~2d ago
~2d ago
~9d ago
~11d ago
~13d ago
~16d ago
~16d ago
~24d ago
~30d ago
~30d ago