Shader "Normal Map"
Publié : jeu. 11/mars/2010 9:55
Bonjour,
Toujours dans mon odyssée à la découverte des Shaders, j'ai tenté d'adapter un shader créé par Evolved (pour DarkBasic) afin de gérer des Normal Maps.
J'ai encore un peu galéré, notamment pour référencer des "texture_units" définies dans le Material depuis le PixelShader, mais ça c'est bon, ça affiche quelque chose d'assez proche de ce que ça devrait afficher.
Seul souci: l'effet de "relief" généré par le shader semble être inversé => il apparait quand la lumière est derrière l'objet, et disparaît quand la lumière est devant.
Voici une archive avec le code, le shader et le material:
http://keleb.free.fr/pb/normalMap_shader.zip
Je n'ai fait quasiment aucune modif' dans le shader: j'ai juste interverti les paramètres des instructions "mul" quand on multipliait une matrice par un vecteur (recommandation trouvée dans la doc d'Ogre"), et ajouté le calcul de la binormale des vertex, qui n'est pas prise en charge dans le mesh au format Ogre:
ça viendrait de là ? Ou alors des paramètres que je passe depuis le Material?
(je peux fournir le code du shader d'origine, si vous voulez comparer).
Merci d'avance si vous pouvez me donner une piste!
Toujours dans mon odyssée à la découverte des Shaders, j'ai tenté d'adapter un shader créé par Evolved (pour DarkBasic) afin de gérer des Normal Maps.
J'ai encore un peu galéré, notamment pour référencer des "texture_units" définies dans le Material depuis le PixelShader, mais ça c'est bon, ça affiche quelque chose d'assez proche de ce que ça devrait afficher.
Seul souci: l'effet de "relief" généré par le shader semble être inversé => il apparait quand la lumière est derrière l'objet, et disparaît quand la lumière est devant.

Voici une archive avec le code, le shader et le material:
http://keleb.free.fr/pb/normalMap_shader.zip
Je n'ai fait quasiment aucune modif' dans le shader: j'ai juste interverti les paramètres des instructions "mul" quand on multipliait une matrice par un vecteur (recommandation trouvée dans la doc d'Ogre"), et ajouté le calcul de la binormale des vertex, qui n'est pas prise en charge dans le mesh au format Ogre:
Code : Tout sélectionner
float3 binormal = cross(IN.Tangent, IN.Normal);

(je peux fournir le code du shader d'origine, si vous voulez comparer).
Merci d'avance si vous pouvez me donner une piste!