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 :

[SFML 2.4/ OpenGL] Shader flou sur vertex array pour générer un fond spatial dynamique


Sujet :

OpenGL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Avril 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [SFML 2.4/ OpenGL] Shader flou sur vertex array pour générer un fond spatial dynamique
    Bonjour,

    J'essais en ce moment de créer un fond dynamique représentant une vue dans l'espace, c'est-à-dire avec pas mal d'étoiles qui brillent.
    J'ai donc dessiner à l'aide d'un sf::VertexArray chacune de mes étoiles et je les fait clignotées en faisant varier leurs opacité. Chaque étoile a une couleur différente et aucune texture.
    Pour gagner en performance, j'ai utilisé 3 vertices pour représenter une étoile(donc un triangle). Les étoiles étant petites, on ne vois pas que ce sont des triangles.
    En revanche, j'aurais aimé appliquer un flou sur mon vertexArray pour créer une sorte d'halo autour de chaque étoile tout en floutant mes triangles.

    Je ne m'y connais que très très peu en GLSL, le seul shader que j'ai réussi à faire pour le moment est un simple shader transformant une image couleur en noir et blanc.
    En revanche, je ne sais pas du tout comment travailler sur un vertexArray qui n'a aucune texture. Ce ne sont que des vertices ayant des couleurs. Est-ce que je peux réellement réussir à appliquer un flou à ce vertexArray?

    J'ai essayé pas mal de shader du net, mais forcément ceux-ci servaient tous à travailler sur des images :/

    Donc pour résumé, je demande votre aide principalement pour savoir s'il est vraiment possible d'appliquer un flou sur un vertexArray en utilisant un shader et si oui, auriez-vous des pistes sur la façon de procéder?

    Merci à vous!
    Nom : vertexArray.png
Affichages : 411
Taille : 176,1 Ko

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 37
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par Koseki Voir le message
    J'ai essayé pas mal de shader du net, mais forcément ceux-ci servaient tous à travailler sur des images :/
    Voilà le cœur de ton problème, à ma connaissance les techniques pour flouter sont basées sur un traitement de l'image à posteriori.
    Dans ton cas par exemple une approche simple serait de rendre ton fond étoilé en utilisant un traitement de flou à base d'un shader (pixel shader) afin de créer une texture que tu utiliserais ensuite comme fond de ton rendu final.

    Désolé pour la concision ou de ne pas prendre le temps de trouver des sources ou liens, mais le sujet est assez basique en matière de shader et tu ne devrais pas avoir de mal à en trouver.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    J'ai essayé pas mal de shader du net, mais forcément ceux-ci servaient tous à travailler sur des images :/
    Oui, mais vous pouvez aussi travailler sur des images, en effectuant le rendu dans un tampon de rendu.

    Toutefois, pour les étoiles, vous devriez (d'après moi) utiliser des quads (des sprites) en utilisant une image de ce type :
    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.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Avril 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse Piraaate,

    J'ai donc essayer de dessiner mon vertexArray dans un RenderTexture pour y appliquer un flou via un fragment shader.
    J'avouerais que le résultat me convient pas trop, mais ça fonctionne!

    Voici le fragment shader que j'ai utilisé(récupérer dans les exemples de la SFML il me semble)

    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
    uniform sampler2D texture;
    uniform float blur_radius;
     
    void main()
    {
        vec2 offx = vec2(blur_radius, 0.0);
        vec2 offy = vec2(0.0, blur_radius);
     
        vec4 pixel = texture2D(texture, gl_TexCoord[0].xy) * 4.0 +
                     texture2D(texture, gl_TexCoord[0].xy - offx) * 2.0 +
                     texture2D(texture, gl_TexCoord[0].xy + offx) * 2.0 +
                     texture2D(texture, gl_TexCoord[0].xy - offy) * 2.0 +
                     texture2D(texture, gl_TexCoord[0].xy + offy) * 2.0 +
                     texture2D(texture, gl_TexCoord[0].xy - offx - offy) * 1.0 +
                     texture2D(texture, gl_TexCoord[0].xy - offx + offy) * 1.0 +
                     texture2D(texture, gl_TexCoord[0].xy + offx - offy) * 1.0 +
                     texture2D(texture, gl_TexCoord[0].xy + offx + offy) * 1.0;
     
        gl_FragColor =  gl_Color * (pixel / 16.0);
    }
    Il floute bien(en utilisant une valeur de 0.001 pour le blur radius O_o) mais ça ne créer pas vraiment l'effet d'halo que je voulais au départ. Il va donc falloir que je trouve d'autres approches pour avoir un beau fond spatial dynamique, si jamais quelqu'un s'est déjà penché dessus ou que quelqu'un travail actuellement dessus, n'hésitez pas à mettre vos idées en commun. On peux toujours essayer d'y réfléchir à plusieurs

    Edit: L'idée d'utiliser des quads et de plaquer une image n'est pas si mal je pense. ça m'embêtais un peu pour les performances, mais vue que j'utilise qu'un seul vertexArray au final, plaquer une texture dessus ne changera quasi pas les performances. C'est surement même plus intéressant que d'utiliser les shaders qui seront certainement plus gourmands. Je m'y attaque et je vous dit quoi!

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Salut,

    Tu peux aussi générer tout directement avec un fragment shader.

    Peut être que ceci te plaira ou pourra te servir de base: https://www.shadertoy.com/view/XlfGRj
    (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

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Avril 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Wow, c'est assez impressionnant!

    J'ai essayer en appliquant une texture, ça donne ceci:
    Nom : vertexArray.png
Affichages : 386
Taille : 190,9 Ko

    Merci pour ta réponse wax78, je vais regarder ce shader et l'essayer dès que je peux! Personnellement, j'ai besoin d'un fond fixe mais avec les étoiles qui scintillent. Je regarderais comment je peux le modifier ou m'en inspirer pour pondre quelque chose de bien

  7. #7
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 476
    Points
    11 476
    Billets dans le blog
    11
    Par défaut
    Salut !
    Pour obtenir un effet de halo, tu peux te pencher sur un effet de type bloom : https://learnopengl.com/Advanced-Lighting/Bloom, ou http://prideout.net/archive/bloom/
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

Discussions similaires

  1. Performances OpenGL, Vertex Array, (VBO ?)
    Par Burckel dans le forum OpenGL
    Réponses: 6
    Dernier message: 07/03/2007, 10h40
  2. tutoriels sur vertex arrays
    Par franc82 dans le forum OpenGL
    Réponses: 3
    Dernier message: 01/11/2006, 21h02
  3. Réponses: 1
    Dernier message: 06/04/2006, 17h04
  4. [OpenGL/C++] Opérations sur les Textures
    Par Bob.Killer dans le forum OpenGL
    Réponses: 6
    Dernier message: 10/08/2005, 10h27
  5. [OPENGL/C++] Couleur sur un DWORD ?
    Par Bob.Killer dans le forum OpenGL
    Réponses: 7
    Dernier message: 15/04/2005, 14h20

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