[4.60] shaders (reflection, normalmap..) & Lightmap

Généralités sur la programmation 3D
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

[4.60] shaders (reflection, normalmap..) & Lightmap

Message par blendman »

salut

voici un petit exemple pour réaliser un effet de type réflexion sur un objet (ou plus environnement map), autrement une fausse réflexion, mais c'est plutôt joli :).

Avec ça, vous pouvez créer des materials de métal, verre, mais aussi des effets d'équipement magique, si vous animer ce material :).
Le mesh 3D est la suzanne de blender ;).
http://blendman.free.fr/dev/pb/3D/pb4-6 ... envMap.zip

Information
le fichier contient 2 techniques :
- shader type environnement map, sorte de fake reflection
- shader lumière spéculaire
- possibilité d'avoir un shader avec texture animée :
Dans le fichier suzanne.material, vous pouvez changer de material en les renommant : le 1er s'appelle envRoom et le 2ème envRoomAnimated, si vous nommez le 1er envRoom__ et le deuxième envRoom, c'est le 2ème qui sera pris en compte et votre material sera alors animé ;)

Voiloutch :)

Je vais faire d'autres essais et je les posterai.

Fred / G-rom : vous pouvez utiliser cet exemple pour l'inclure dans le dossier source/exemple de purebasic 4.60 si vous voulez ;).

au passage, je me demande s'il n'y a pas un bug sur RotateEntity() avec #PB_Relative comme mode, car ça ne marche avec la 4.60.
Dernière modification par blendman le mer. 13/avr./2011 7:41, modifié 1 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: [4.60] shader : reflection (env_map)

Message par djes »

C'est sympa comme exemple, merci. Par contre, regarde ton ogre.log, il y a pas mal d'erreurs dans ton shader...
Au fait, un petit truc pour le code. En utilisant ";-", tu peux faire une espèce de raccourci dans le panneau de droite, c'est très utile :D
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [4.60] shader : reflection (env_map)

Message par G-Rom »

Fred / G-rom : vous pouvez utiliser cet exemple pour l'inclure dans le dossier source/exemple de purebasic 4.60 si vous voulez ;).
Merci , mais l'exemple est déjà codé ;)
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [4.60] shader : reflection (env_map)

Message par blendman »

ah ben, ça c'est classe :)

Et il y a d'autres exemples de prévu ?

Car j'ai une petite liste sinon :D :
- multi-texturing & multi-uv (je vais faire un exemple si j'y arrive), lightmap (pareil, je ferais un exemple, c'est du même genre)
- réflexion & réfraction (http://www.youtube.com/watch?v=Syb8QQWu0Pk)*
- lumière speculaire (ou shader spéculaire) : un peu comme dans mon exemple, mais mieux, parce qu'on ne les voit pas trop ces "reflets" ou lumières spéculaires :D
- glow ou bloom (post fx)
- dof
- normalmap
- shader fresnel (ou fall-of) **
- ombres douces (soft shadows) (http://www.ogre3d.org/forums/viewtopic.php?t=34166) ***

y'a de quoi faire, je pense que la plupart des fonctions sont disponibles dans Ogre ;).

shaders :

* reflexion & refraction :
http://www.ogre3d.org/forums/viewtopic.php?f=5&t=55597

**FRESNEL (http://www.ogre3d.org/forums/viewtopic.php?f=8&t=60004)

Code : Tout sélectionner

vertex_program fresnel_vs cg {
   source vs_fresnel.cg
   entry_point main
   profiles vs_2_0 arbvp1 vs_2_x vs_3_0 vp40
   
   default_params {
      // Leave these
      param_named_auto WorldITXf    inverse_transpose_world_matrix
      param_named_auto WorldXf      world_matrix
      param_named_auto ViewIXf      inverse_view_matrix
      param_named_auto WvpXf        worldviewproj_matrix
   }
}

fragment_program fresnel_ps cg {
   source ps_fresnel.cg
   entry_point main
   profiles ps_2_0 arbfp1 ps_2_x ps_3_0 ps_3_x fp40
   
   default_params {
      // Default is white (rgb)
      param_named GlowColor float3 1.0 1.0 1.0
      // Bigger exponent, thinner edges
      param_named GlowExpon float  2.5
      // Set transparency of the fresnel
      param_named Alpha      float  1.0
   }
}

material cg/fresnel {
   technique {
      pass {
         ambient 1.0 1.0 1.0
         diffuse 1.0 1.0 1.0

         texture_unit {
            texture pink.png
            filtering linear linear linear
         }
      }
      pass {
         scene_blend add
         depth_check on
         lighting on
         
         vertex_program_ref fresnel_vs {
         }
         
         fragment_program_ref fresnel_ps {
            param_named GlowColor float3 1.0 1.0 1.0
            param_named GlowExpon float  2.5
         }
      }
   }
}
***
http://www.ogre3d.org/forums/viewtopic. ... &start=100
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [4.60] shader : reflection (env_map)

Message par blendman »

djes a écrit :C'est sympa comme exemple, merci.
coucou Djes, ça va ? :)

Par contre, regarde ton ogre.log, il y a pas mal d'erreurs dans ton shader...
je vais regarder ça ;). En fait, j'ai regardé sur le site d'ogre et j'ai pris un shader (dans la doc) pour faire de l'envmap. Mais du coup, je l'ai juste un tout petit peu adapté à mon exemple, sans trop regarder le log, j'avoue. Je vais corriger ça :P.

Au fait, un petit truc pour le code. En utilisant ";-", tu peux faire une espèce de raccourci dans le panneau de droite, c'est très utile :D
yep, je savais ça, c'est vrai que j'aurai pu l'utiliser, tout comme ;{ et ;} :)
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: [4.60] shader : reflection (env_map)

Message par kelebrindae »

J'avais un peu bidouillé avec les shaders il y a quelques temps, tu peux peut-être jeter un oeil:

Normal Maps:
http://www.purebasic.fr/french/viewtopi ... 13&t=10640
http://www.purebasic.fr/french/viewtopi ... 13&t=10358
Image

Refraction:
http://www.purebasic.fr/english/viewtop ... 16&t=41426
Image
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [4.60] shader : reflection (env_map)

Message par blendman »

kelebrindae : superbes exemples !

- réfraction : avec cet exemple, ne peut-on pas réaliser un miroir (réflexion) ?
- normal map : c'est classe, mais c'est facilement explotable sur un autre objet ou il faut trifouiller entièrement le shader ? Autre question : ce shader gère-t-il aussi la lumière spéculaire ?

Il faut vraiment que ce genre d'exemple soit ajouté dans les exemples de Purebasic pour la 3D :D! (oui, je sais G-rom y travaille ;)).
A mon avis, Purebasic est peu exploité niveau 3D, mais il y a vraiment de quoi faire avec :).

Voici un autre exemple :
un "fake" lightmap.
Ce n'est pas du vrai lighting en multi-texturing, car j'ai juste collé le lightmap sur la texture des objets. Je ferai un vrai exemple en multitexturing, c'est mieux, ça permet d'avoir des textures aux uv différents par exemple :).

Image

Le lightmap (sol+cube) a été réalisé dans blender.
Si certains sont intéressés et s'ils connaissent blender, je peux faire un petit tutoriel c'est vraiment très simple ;).

le fichier pour tester :
http://blendman.free.fr/dev/pb/3D/lightmap.zip

Si vous avez d'autres techniques, n'hésitez pas à les partager, ça permet de voir ce que pb et ogre permettent de faire :).


Par exemple, si vous savez comment faire un "bloom", n'hésitez pas à poster le code :D.
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: [4.60] shader : reflection (env_map)

Message par kelebrindae »

Bien jolie lightmap également!
blendman a écrit :c'est facilement explotable sur un autre objet ou il faut trifouiller entièrement le shader ?
Non, ça marche sur n'importe quel objet, pour peu que les "tangents" soient générées.
blendman a écrit :ce shader gère-t-il aussi la lumière spéculaire
Je crois que oui, avec une limite de 3 lumières (mais c'est facile à changer).
blendman a écrit :réfraction : avec cet exemple, ne peut-on pas réaliser un miroir
On devrait pouvoir en le bidouillant un minimum, mais en 4.50 ce n'était pas possible car on n'avait pas de compositor (on ne pouvait récupérer le résultat d'une caméra pour l'utiliser comme texture un peu plus loin dans le shader).


[EDIT]: 'tain, je viens de vérifier: plus aucun de mes shaders ne fonctionne avec la 4.60. J'crois que j'vais pleurer... :cry:
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [4.60] shader : reflection (env_map)

Message par blendman »

kelebrindae a écrit :Bien jolie lightmap également!
je l'ai réalisé en 5 minutes dans blender, mais c'était pour faire un test pour voir si ça marchait facilement ;).
blendman a écrit :c'est facilement exploitable sur un autre objet ou il faut trifouiller entièrement le shader ?
Non, ça marche sur n'importe quel objet, pour peu que les "tangents" soient générées.
[/quote]cool. donc, à l'export, il faudra que l'exporte les tangents j'imagine.
blendman a écrit :ce shader gère-t-il aussi la lumière spéculaire
Je crois que oui, avec une limite de 3 lumières (mais c'est facile à changer).[/quote][/quote]oh, mais trois lights qui envoient des spéculaires c'est suffisant dans beaucoup de scènes :)

blendman a écrit :réfraction : avec cet exemple, ne peut-on pas réaliser un miroir
On devrait pouvoir en le bidouillant un minimum, mais en 4.50 ce n'était pas possible car on n'avait pas de compositor (on ne pouvait récupérer le résultat d'une caméra pour l'utiliser comme texture un peu plus loin dans le shader).[/quote][/quote]ah ok. Et sinon, il y a moyen de créer un shader de réflexion autrement (à part l'env-map), par exemple, du cube mapping ou quelque chose d'autre ?

[EDIT]: 'tain, je viens de vérifier: plus aucun de mes shaders ne fonctionne avec la 4.60. J'crois que j'vais pleurer... :cry:
c'estàç cause du setmeshdate(), non ?
car je pense que ça va être remis par la suite.
Et les shaders restent valables, non ?
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [4.60] shader : reflection (env_map)

Message par G-Rom »

juste un mot en passant , je suis débordé sur le plan pro , j'ai pas trop le temps de quoi que ce soit , juste à savoir que les shaders ne supportent pas le CG , Fred à choisi de supporté GLSL & HLSL. Pour les tangentes , BuildMeshTangentVectors() existe déjà , mais n'est pas dans la bêta 1 ( j'ai pas testé la 2 encore ) Pour de la lumière par pixel , je n'ai pas testé personnellement pour le moment faute de temps , mais ca ne devrais pas posé de problèmes particuliers ( voir du coté des materials , c'est eux qui génère les shaders adéquat )
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [4.60] shader : reflection (env_map)

Message par blendman »

G-Rom a écrit :à savoir que les shaders ne supportent pas le CG , Fred à choisi de supporté GLSL & HLSL.
ah ok, ben faudra qu'il nous fasse de beaux exemples alors :D.
Pour de la lumière par pixel , je n'ai pas testé personnellement pour le moment faute de temps , mais ca ne devrais pas posé de problèmes particuliers ( voir du coté des materials , c'est eux qui génère les shaders adéquat )
lumière par pixel = bloom par exemple ou autre chose ?

merci des infos en tout cas.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: [4.60] shader : reflection (env_map)

Message par G-Rom »

non, le bloom c'est un compositor ( qui bug après le passage de fred :D ) , j'ai des exemples , mais à base de GLSL ( je suis sous linux ) , il y a des outils de conversion qui traine ( je crois que kelebrindae avait donné un bon lien à ce sujet ).
La lumière par pixel est géré par shader via des matérial ( si tu veut du spéculaire sur un mesh peu triangulé par exemple ). la lumière de base est géré par vertex, c'est moins joli , mais c'est plus rapide.
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [4.60] shader : reflection (env_map)

Message par blendman »

G-Rom a écrit :non, le bloom c'est un compositor ( qui bug après le passage de fred :D ) , j'ai des exemples , mais à base de GLSL ( je suis sous linux ) , il y a des outils de conversion qui traine ( je crois que kelebrindae avait donné un bon lien à ce sujet ).
yep, j'ai testé son exemple (via la doc de ogre) et efectivement, visiblement ça bug, grâce à Fred lol ;).
La lumière par pixel est géré par shader via des matérial ( si tu veut du spéculaire sur un mesh peu triangulé par exemple ). la lumière de base est géré par vertex, c'est moins joli , mais c'est plus rapide.
ah oui, je comprends :).
Effectivement, pour le moment, les spéculaires sont gérés par vertex, et c'est pas super.
Je préférerai du spéculaire par pixel, donc, lorsque tu auras un peu de temps, n'hesites pas à faire un exemple.

je me demande si l'exemple de kelebrindae n'est pas par pixel d'ailleurs (l'exemple avec normal map et spec)
kelebrindae
Messages : 579
Inscription : ven. 11/mai/2007 15:21

Re: [4.60] shader : reflection (env_map)

Message par kelebrindae »

blendman a écrit :je me demande si l'exemple de kelebrindae n'est pas par pixel d'ailleurs
Effectivement, il me semble que c'est bien du "per-pixel lightning".
blendman a écrit :c'est à cause du setmeshdate(), non ? Et les shaders restent valables, non ?
Bin non, apparemment c'est les shaders qui ne fonctionnent plus: même en remplaçant les "setMeshData" par des "CreatePlane" et consorts, j'ai plein d'erreurs dans le "Ogre.log" et plus rien à l'écran. :(

G-Rom, peux-tu nous dire si je dois ré-écrire mes shaders, ou bien est-ce que c'est un dysfonctionnement temporaire de PB / Ogre?
Les idées sont le souvenir de choses qui ne se sont pas encore produites.
Fred
Site Admin
Messages : 2805
Inscription : mer. 21/janv./2004 11:03

Re: [4.60] shader : reflection (env_map)

Message par Fred »

Sympa les exemples !
Répondre