PureBasic

Forums PureBasic
Nous sommes le Mer 19/Juin/2013 4:13

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 18 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: Shader Terrain GLSL
MessagePosté: Mar 05/Juin/2012 10:45 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Mai/2007 15:21
Messages: 491
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. :mrgreen: Yes! :mrgreen:

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... :wink:
Exemple avec sources fournis ici: http://keleb.free.fr/codecorner/download/purebasic/terrainShader.zip (3 Mo)
(n'oubliez pas d'indiquer "OpenGL" comme subsystem)
Image

_________________
Les idées sont le souvenir de choses qui ne se sont pas encore produites.


Dernière édition par kelebrindae le Mar 05/Juin/2012 11:24, édité 1 fois.

Haut
 Profil  
 
 Sujet du message: Re: Shader Terrain GLSL
MessagePosté: Mar 05/Juin/2012 11:17 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 05/Sep/2008 11:42
Messages: 883
Localisation: Besançon
:D !
Yes !
Genial !
Superbe !
Grandiose !
Kelebrindae !

_________________
Only PureBasic makes it possible


Haut
 Profil  
 
 Sujet du message: Re: Shader Terrain GLSL
MessagePosté: Mar 05/Juin/2012 11:55 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 27/Jan/2005 19:07
Messages: 1842
De la terraformation virtuelle en quelque sorte! 8)

_________________
Est beau ce qui plaît sans concept :)
Speedy Galerie


Haut
 Profil  
 
 Sujet du message: Re: Shader Terrain GLSL
MessagePosté: Mer 06/Juin/2012 12:53 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 19/Fév/2011 12:46
Messages: 928
on the floute :D


Ben bravo encore une fois.

_________________
http://blendman.blogspot.com/


Haut
 Profil  
 
 Sujet du message: Re: Shader Terrain GLSL
MessagePosté: Mar 19/Juin/2012 1:50 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 08/Juil/2007 18:32
Messages: 1306
Localisation: Toulouse
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)
Image

_________________
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86


Haut
 Profil  
 
 Sujet du message: Re: Shader Terrain GLSL
MessagePosté: Mar 19/Juin/2012 8:29 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 05/Sep/2008 11:42
Messages: 883
Localisation: Besançon
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...

_________________
Only PureBasic makes it possible


Haut
 Profil  
 
 Sujet du message: Re: Shader Terrain GLSL
MessagePosté: Mar 19/Juin/2012 10:00 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Mai/2007 15:21
Messages: 491
Houlà !

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.


Haut
 Profil  
 
 Sujet du message: Re: Shader Terrain GLSL
MessagePosté: Mar 19/Juin/2012 14:29 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 08/Juil/2007 18:32
Messages: 1306
Localisation: Toulouse
Bonjour à tous et à toute :)
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...
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?

_________________
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86


Haut
 Profil  
 
 Sujet du message: Re: Shader Terrain GLSL
MessagePosté: Mar 19/Juin/2012 17:03 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Mai/2007 15:21
Messages: 491
beauregard a écrit:
J'imagine que les deux codes .fx joue un rôle d'importance?
Oui: le code du shader proprement dit se trouve dedans.
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:
10:59:38: *-*-* OGRE Initialising
10:59:38: *-*-* Version 1.7.0 (Cthugha)
mais ça, c'est fourni par PB, donc tu dois bien avoir la version 1.7.0. .
Et surtout :
Code:
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
qui t'indique la version d'OpenGL utilisée (je crois).
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.


Haut
 Profil  
 
 Sujet du message: Re: Shader Terrain GLSL
MessagePosté: Mar 19/Juin/2012 19:56 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 08/Juil/2007 18:32
Messages: 1306
Localisation: Toulouse
Code:
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:
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


Haut
 Profil  
 
 Sujet du message: Re: Shader Terrain GLSL
MessagePosté: Mer 20/Juin/2012 8:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Mai/2007 15:21
Messages: 491
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?
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à.

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:
GLSL link result :
alors que moi j'ai:
Code:
GLSL link result : Fragment shader(s) linked, vertex shader(s) linked.
Mais après, pour savoir d'où ça vient, il faudrait une console de debug OpenGL ou un truc comme ça; autant dire que cela dépasse de loin mes compétences...

_________________
Les idées sont le souvenir de choses qui ne se sont pas encore produites.


Haut
 Profil  
 
 Sujet du message: Re: Shader Terrain GLSL
MessagePosté: Mer 20/Juin/2012 21:04 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 08/Juil/2007 18:32
Messages: 1306
Localisation: Toulouse
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


Haut
 Profil  
 
 Sujet du message: Re: Shader Terrain GLSL
MessagePosté: Jeu 21/Juin/2012 8:23 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Mai/2007 15:21
Messages: 491
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... :?

_________________
Les idées sont le souvenir de choses qui ne se sont pas encore produites.


Haut
 Profil  
 
 Sujet du message: Re: Shader Terrain GLSL
MessagePosté: Jeu 21/Juin/2012 8:30 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 05/Sep/2008 11:42
Messages: 883
Localisation: Besançon
Hello,

De mon coté, je vais mettre à jour OpenGl sur l'ordi où ça bug : on verra bien...

_________________
Only PureBasic makes it possible


Haut
 Profil  
 
 Sujet du message: Re: Shader Terrain GLSL
MessagePosté: Jeu 21/Juin/2012 10:58 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
même souci, c'est tout noir.
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)]


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 18 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye