Shader Terrain GLSL
-
- Messages : 579
- Inscription : ven. 11/mai/2007 15:21
Shader Terrain GLSL
Bonjour,
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. Yes!
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)
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. Yes!
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)
Dernière modification par kelebrindae le mar. 05/juin/2012 11:24, modifié 1 fois.
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Re: Shader Terrain GLSL
!
Yes !
Genial !
Superbe !
Grandiose !
Kelebrindae !
Yes !
Genial !
Superbe !
Grandiose !
Kelebrindae !
Only PureBasic makes it possible
-
- Messages : 2194
- Inscription : jeu. 27/janv./2005 19:07
Re: Shader Terrain GLSL
De la terraformation virtuelle en quelque sorte!
Est beau ce qui plaît sans concept
Speedy Galerie
Speedy Galerie
Re: Shader Terrain GLSL
on the floute
Ben bravo encore une fois.
Ben bravo encore une fois.
http://blendman.blogspot.com/
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
Forum PB fr : http://www.purebasic.fr/french - Forum PB Eng : http://www.purebasic.fr/english
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
Re: Shader Terrain GLSL
Les nuages et les étendus d'eau sont bien en mouvement, et je peux déplacer la caméra librement.
Mais il y a un petit soucis de rendu (j'ai bien OpenGL dans Bibliothèque sous-système)
Mais il y a un petit soucis de rendu (j'ai bien OpenGL dans Bibliothèque sous-système)
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
Re: Shader Terrain GLSL
Hello Beauregard !!
J'ai ça aussi sur un de mes ordis à la maison mais pourtant tous les autres exemples PB en 3D tournent sans soucis.
J'ai également OpenGL dans le compilateur...
J'ai ça aussi sur un de mes ordis à la maison mais pourtant tous les autres exemples PB en 3D tournent sans soucis.
J'ai également OpenGL dans le compilateur...
Only PureBasic makes it possible
-
- Messages : 579
- Inscription : ven. 11/mai/2007 15:21
Re: Shader Terrain GLSL
Houlà !
Essayez de virer le "WorldShadows(#PB_Shadow_Modulative)" de la ligne 43; il ne sert pas à grand-chose de toutes façons...
Essayez de virer le "WorldShadows(#PB_Shadow_Modulative)" de la ligne 43; il ne sert pas à grand-chose de toutes façons...
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
Re: Shader Terrain GLSL
Bonjour à tous et à toute
aucun effet, même en désactivant les lignes voisines (41, 42 et 43), ou encore en positionnant une deuxième lumière, rien y fait. J'imagine que les deux codes .fx joue un rôle d'importance?kelebrindae a écrit :Houlà !
Essayez de virer le "WorldShadows(#PB_Shadow_Modulative)" de la ligne 43; il ne sert pas à grand-chose de toutes façons...
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
-
- Messages : 579
- Inscription : ven. 11/mai/2007 15:21
Re: Shader Terrain GLSL
Oui: le code du shader proprement dit se trouve dedans.beauregard a écrit :J'imagine que les deux codes .fx joue un rôle d'importance?
Ceci dit, pour ton erreur, je verrais bien un problème de version d'OpenGL, car j'avais un peu le même résultat avant de calculer les "tangents" du mesh (sans tangents, pas de normal mapping).
Pour le savoir, tu peux peut-être regarder dans ton "ogre.log" les sections suivantes:
Code : Tout sélectionner
10:59:38: *-*-* OGRE Initialising
10:59:38: *-*-* Version 1.7.0 (Cthugha)
Et surtout :
Code : Tout sélectionner
10:59:39: GLRenderSystem::_createRenderWindow "PureBasic Ogre", 800x500 windowed miscParams: FSAA=0 displayFrequency=0 externalWindowHandle=198722 vsync=true
10:59:39: GL_VERSION = 3.2.9756 Compatibility Profile Context
10:59:39: GL_VENDOR = ATI Technologies Inc.
10:59:39: GL_RENDERER = ATI Radeon HD 3400 Series
Enfin, tu peux regarder vers la fin du log pour trouver des "OGRE_EXCEPTION", qui indiquent en général ce qui ne va pas...
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
Re: Shader Terrain GLSL
Code : Tout sélectionner
19:13:25: GL_VERSION = 3.2.0
19:13:25: GL_VENDOR = NVIDIA Corporation
19:13:25: GL_RENDERER = GeForce 315/PCI/SSE2
et sûrement le problème:
Code : Tout sélectionner
19:13:26: Can't assign material none to SubEntity of E0 because this Material does not exist. Have you forgotten to define it in a .material script?
le fichier complet, et hop:
http://www.mirari.fr/qupg
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
-
- Messages : 579
- Inscription : ven. 11/mai/2007 15:21
Re: Shader Terrain GLSL
Non, en fait c'est normal: avec Ogre, par défaut, le nom du material est stocké dans le mesh. Mais là, comme je savais que j'allais assigner manuellement le material dans le code PB, je n'en ai défini aucun quand j'ai créé le mesh. Du coup, au chargement, Ogre essaie de lui assigner un material nommé "none" ("aucun"), ne le trouve pas, et demande si c'est un oubli de notre part... Bref: c'est un peu bizarre, mais le bug ne vient pas de là.beauregard a écrit :19:13:26: Can't assign material none to SubEntity of E0 because this Material does not exist. Have you forgotten to define it in a .material script?
En comparant ton Ogre.log avec un des miens, tout ce que j'ai vu c'est qu'à la fin de ton fichier, il y a:
Code : Tout sélectionner
GLSL link result :
Code : Tout sélectionner
GLSL link result : Fragment shader(s) linked, vertex shader(s) linked.
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
-
- Messages : 1307
- Inscription : dim. 08/juil./2007 18:32
- Localisation : Toulouse
Re: Shader Terrain GLSL
En enlevant opengl les montagnes sont toutes blanches, comme recouverte de neige, donc mon pc aurait peut être besoin d'une mise à jour de l'opengl ?
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
-
- Messages : 579
- Inscription : ven. 11/mai/2007 15:21
Re: Shader Terrain GLSL
Non: en enlevant OpenGL, tu utilises DirectX, qui ne peut exécuter le shader, donc le mesh est affiché sans material; c'est pour ça qu'il est blanc.
Pour ce qui est de mettre tes drivers à jour, franchement, je n'en sais rien. Tu as OpenGL v3.2.0 tandis que moi j'ai la v3.2.9756. Est-ce que ça explique le bug? Aucune idée...
Pour ce qui est de mettre tes drivers à jour, franchement, je n'en sais rien. Tu as OpenGL v3.2.0 tandis que moi j'ai la v3.2.9756. Est-ce que ça explique le bug? Aucune idée...
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Re: Shader Terrain GLSL
Hello,
De mon coté, je vais mettre à jour OpenGl sur l'ordi où ça bug : on verra bien...
De mon coté, je vais mettre à jour OpenGl sur l'ordi où ça bug : on verra bien...
Only PureBasic makes it possible
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Re: Shader Terrain GLSL
même souci, c'est tout noir.
Ou est-ce qu'on trouve la version de OpenGL ? (mon pilote graphique est à jour)
Ou est-ce qu'on trouve la version de OpenGL ? (mon pilote graphique est à jour)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]