En m'amusant avec mon petit éditeur de material/shader, je suis parvenu à fusionner deux shaders GLSL trouvé sur le net: un qui gère le normal mapping, et un qui gère les terrains.


Concrètement, qu'est-ce que ça fait?
=> le shader prend un mesh (représentant un terrain, de préférence) et applique dessus trois types de textures: de l'herbe là où le mesh est plutôt horizontal, de la roche là où il est escarpé, du sable là où il est relativement plat et proche de l'altitude zéro (pour simuler des plages). De plus, les textures sont "blendées" sur les transition entre les zones, pour faire plus joli.
Du coup, on n'a plus à texturer manuellment le mesh: c'est le shader qui le fait automatiquement en fonction de la topologie du terrain.
Mon apport là-dedans à été la conversion pour Ogre du shader terrain (prévu pour WebGL à l'origine), et l'ajout du normal mapping, récupéré d'un autre shader; le résultat tient un peu de la créature de Frankenstein, mais (à ma grande surprise) ça fonctionne.
En fait, ce serait génial pour un mesh généré dynamiquement dans PB, mais comme le normal mapping a besoin des "tangents" du mesh et que PB ne sait pas (ou pas encore?) les générer, j'ai dû me rabattre sur un mesh statique pour l'exemple.
Le material passe plusieurs paramètres au shader, permettant d'ajuster le résultat:
- la répétition des textures (tiling);
- altitudes mini/maxi du terrain;
- proportion de rochers;
- douceur des transitions entre zones.
Il y aurait plein de choses à améliorer, mais je suis tellement content que ça marche que je le poste tout de suite; n'hésitez donc pas à partager vos modifs / améliorations...

Exemple avec sources fournis ici: http://keleb.free.fr/codecorner/downloa ... Shader.zip (3 Mo)
(n'oubliez pas d'indiquer "OpenGL" comme subsystem)
