Page 1 sur 2
[4.60] shaders (reflection, normalmap..) & Lightmap
Publié : dim. 10/avr./2011 12:52
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.
Re: [4.60] shader : reflection (env_map)
Publié : dim. 10/avr./2011 15:31
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

Re: [4.60] shader : reflection (env_map)
Publié : dim. 10/avr./2011 18:26
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é

Re: [4.60] shader : reflection (env_map)
Publié : dim. 10/avr./2011 23:05
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

:
- 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

- 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
Re: [4.60] shader : reflection (env_map)
Publié : lun. 11/avr./2011 8:03
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

.
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

yep, je savais ça, c'est vrai que j'aurai pu l'utiliser, tout comme ;{ et ;}

Re: [4.60] shader : reflection (env_map)
Publié : lun. 11/avr./2011 8:54
par kelebrindae
Re: [4.60] shader : reflection (env_map)
Publié : lun. 11/avr./2011 13:50
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

! (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

.
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

.
Re: [4.60] shader : reflection (env_map)
Publié : lun. 11/avr./2011 15:19
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...

Re: [4.60] shader : reflection (env_map)
Publié : lun. 11/avr./2011 17:58
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...

c'estàç cause du setmeshdate(), non ?
car je pense que ça va être remis par la suite.
Et les shaders restent valables, non ?
Re: [4.60] shader : reflection (env_map)
Publié : lun. 11/avr./2011 19:54
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 )
Re: [4.60] shader : reflection (env_map)
Publié : lun. 11/avr./2011 20:40
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

.
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.
Re: [4.60] shader : reflection (env_map)
Publié : lun. 11/avr./2011 21:27
par G-Rom
non, le bloom c'est un compositor ( qui bug après le passage de fred

) , 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.
Re: [4.60] shader : reflection (env_map)
Publié : mar. 12/avr./2011 8:12
par blendman
G-Rom a écrit :non, le bloom c'est un compositor ( qui bug après le passage de fred

) , 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)
Re: [4.60] shader : reflection (env_map)
Publié : mar. 12/avr./2011 8:28
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?
Re: [4.60] shader : reflection (env_map)
Publié : mar. 12/avr./2011 8:54
par Fred
Sympa les exemples !