IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

[GLSL] perlin noise


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Par défaut [GLSL] perlin noise
    Salut,


    j aimerais utiliser le perlin noise dans un fragment shader pour animer des textures type eau/nuages etc..

    j ai déjà plein d algos utilisant openGL (avec upload de texture) mais j ai un soucis pour utiliser ce type d effet en GLSL

    pour l instant , la stratégie choisie et l utilisation des fonctions noise* du GLSL

    je bloque sur cet exemple simple, qui ne sort une couleur unie quelque soit le pixel et la valeur pour fTime (qui change a chaque frame)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    uniform sampler2D Tex_Sampler;
     
    varying vec2 texcoord;
     
    void main(void)
    {
     
        vec4 tex_color = texture2D(Tex_Sampler,texcoord.st);
     
     
     
          float nr = noise1(texcoord.s + fTime)+0.6;
          float ng = noise1(texcoord.t + fTime)+0.6;
     
     
     
          tex_color = vec4(nr,ng,1,1);
     
          tex_color = clamp(tex_color,vec4(0,0,0,0),vec4(1,1,1,1));
     
         gl_FragColor = tex_color;
    }

    quelqu'un a t il une idée sur ce qui peut causer ce problème ?

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 145
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Un prof m'a sorti que les fonctions de noise (GLSL et HLSL) ne donnent jamais rien de convainquant (lorsque l'on arrive à les faire fonctionner, ce que je ne j'ai jamais vu).

    Donc je vous conseille plus la texture de bruit généré par le CPU que la fonction du langage.
    Maintenant, si vous arrivez à faire quelque chose avec, dites le nous (moi)
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre éclairé Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Par défaut
    Bonjour,

    merci pour la réponse.

    dans mon cas, c est pas que le resultat n est pas satisfaisant , c est qu on a l impression que la fonction noise1 retourne tout le temps la meme valeur quelque soit l input (ce qui semble etrange quand meme)

    sinon en suivant cet exemple , j ai reussi a avoir qq chose qui convient

    http://lumina.sourceforge.net/Tutorials/Noise.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
     
    uniform sampler2D Tex_Sampler;
    varying vec2 texcoord;
    uniform bool NoiseEffect;
     
    vec4 rand(vec2 A,vec2 B,vec2 C,vec2 D){ 
     
            vec2 s=vec2(12.9898,78.233); 
     
            vec4 tmp=vec4(dot(A,s),dot(B,s),dot(C,s),dot(D,s)); 
     
            return fract(sin(tmp) * 43758.5453)* 2.0 - 1.0; 
     
            } 
     
     
     
    float noise(vec2 coord,float d){ 
     
            vec2 C[4]; 
     
            float d1 = 1.0/d;
     
            C[0]=floor(coord*d)*d1; 
     
            C[1]=C[0]+vec2(d1,0.0); 
     
            C[2]=C[0]+vec2(d1,d1); 
     
            C[3]=C[0]+vec2(0.0,d1);
     
     
     
            vec2 p=fract(coord*d); 
     
            vec2 q=1.0-p; 
     
            vec4 w=vec4(q.x*q.y,p.x*q.y,p.x*p.y,q.x*p.y); 
     
            return dot(vec4(rand(C[0],C[1],C[2],C[3])),w); 
     
            } 
     
    void main(void)
    {
     
        vec4 tex_color = texture2D(Tex_Sampler,texcoord.st);
     
     
        if (tex_color.a>0 && NoiseEffect ){
     
          vec4 noisevec;
     
          float level=-log2(min(length(dFdx(texcoord.st)),length(dFdy(texcoord.st))));
     
          level = min(level,10.0); //limit the level to avoid slowness
     
          float n = 0.35;
     
          for(int i = 3; i< level;i++){ //3 is the lowest noise level
     
                    n +=  0.80 * noise(texcoord.xy+fTime, exp2(i));
     
          }
     
     
          noisevec = vec4(n*0.5,0.7,0.1,1);
     
          tex_color = noisevec;
     
        }
     
        gl_FragColor = tex_color;
    }
    dans cet exemple j ai une texture acceptable pour ce que je cherche a faire (texture noisy aminée dans les tons verts)

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 098
    Par défaut
    Citation Envoyé par venomelektro Voir le message
    c est qu on a l impression que la fonction noise1 retourne tout le temps la meme valeur quelque soit l input (ce qui semble etrange quand meme)
    Comme le dit LittleWhite, je rajouterai, la fonction Noise NE MARCHE PAS sur les carte graphique "normales". Dans mes souvenirs, y'a une carte genre Wildcat Realizm qui avait la fonction noise implementée et c'etait une des seules.

    Maintenant la derniere fois que j'ai essayé c'etait sur une Geforce 8800 donc peut etre que mtn ...
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé Avatar de venomelektro
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2004
    Messages : 521
    Par défaut
    bizarre je suis en train de lire le bouquin openGL Shading language third edition et il n est mentionné nulle part que l implémentation est foireuse.

    dommage car si c est le cas, c est une information importante a savoir.

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 098
    Par défaut
    Bizzare meme nvidia dans son guide sur les shader dit que ca fonctionne pas ... Je pense surtout que les guide generaux d'opengl font fi de savoir si oui ou non c'est implementé, car c'est censé être le cas, meme si ce n'est pas la réalité.

    6.1.1. Noise Functions Always Return Zero
    The GLSL standard library contains several noise functions of differing dimensions:
    noise1, noise2, noise3, and noise4.
    NVIDIA’s implementation of these functions (currently) always returns zero results.
    cf : http://http.download.nvidia.com/deve....0_Support.pdf

    ou encore


    Lien 2
    Liens 1

    Mais cela n'est peut etre plus d'actualités mais j'en doute....
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 145
    Billets dans le blog
    150
    Par défaut
    Citation Envoyé par venomelektro Voir le message
    bizarre je suis en train de lire le bouquin openGL Shading language third edition et il n est mentionné nulle part que l implémentation est foireuse.

    dommage car si c est le cas, c est une information importante a savoir.
    Sauf que, une implementation c'est:
    - Une specification (Khronos)
    - Une carte d'un constructeur (NVidia / ATI / Imagination Technologies / ...)
    - Un driver

    OpenGL, contrairement a DirectX (et malheureusement) subi seulement quelques tests (disons moindre) afin de savoir si une implementation est conforme.

    Les Orange Book sont principalement base sur la specification. Sachant que la fonction noise peut fonctionner d'une carte a une autre et meme d'une version d'un pilote a un autre ... c'est quelque chose d'assez relatif.


    Finalement, je voulais dire (malgre que je ne connais pas vraiment la fonction noise (faut que j'aille lire la spec )), mais faire un generateur aleatoire (ou pseudo aleatoire) et ultra couteux ... donc j'ai du mal a voir l'avantage d'une telle fonction ...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Perlin Noise en C# XNA
    Par Naografix dans le forum XNA/Monogame
    Réponses: 1
    Dernier message: 20/02/2014, 09h09
  2. Générateur de map 2D avec Perlin Noise (Problème)
    Par firepolo dans le forum Création de jeux vidéo
    Réponses: 2
    Dernier message: 23/10/2013, 22h37
  3. Implémentations Perlin Noise
    Par benDelphic dans le forum Contribuez
    Réponses: 2
    Dernier message: 25/07/2010, 13h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo