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 :

Question de rendu pour appliquer plusieurs shaders


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 18
    Par défaut Question de rendu pour appliquer plusieurs shaders
    Coucou tout le monde!

    Bon, mon p'tit prog avance doucement mais surement. Depuis mon dernier problème, tout va bien

    M'enfin, je viens ici pour vous poser une question dont la réponse va m'être très utile dès ce soir!
    En fait pour faire des tests, j'aimerais bien accumuler plusieurs shaders (genre un qui me rend les textures, un autre qui s'occupe de l'éclairage, et encore un qui ferait du blur par exemple).
    Mais voilà, il me semble que l'on ne peut pas accumuler plusieurs shaders car lorsque l'on active les différents shaders avant de rendre, seul le dernier sera pris en compte.
    Donc voici ma question, pour prendre en compte tous ces shaders, je dois faire du rendu offsreen? Devrai-je utiliser les FBO pour ce type de rendu et rendre ce FBO à l'écran seulement à la fin (les FBOs pour les performances s'il y en a besoin)?
    Qu'en sera-t-il des performances?
    Pour le moment je suis plutôt satisfait du framerate et je voudrai éviter de le faire trop chuter rien que pour ces shaders!

    J'attends vos réponses.
    Allez, bonne fin de journée.

    Bye

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Pourquoi ne pas rassembler tous tes shaders en un seul ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 18
    Par défaut
    Ben je ne voulais pas rassembler tous les shaders en un seul car le moteur contient des shaders, et que je ne peux pas les regrouper en un seul comme ca!
    Pour résumer dedans j'ai une classe shader qui me permet de construire des shaders (vertex et fragment à partir de mes fichiers) et ensuite de les activer --> ils sont donc séparés.
    De plus, si je veux effectuer certains effets sur des objets mais pas sur d'autres, je serai coincé s'ils sont regroupés en un seul.

    Comment tu aurais fait Laurent? (ou même les autres hein )

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    De toute façon tu ne peux appliquer qu'un shader à la fois sur ta géometrie, donc il faut bien trouver une solution. Tu peux toujours fais plusieurs passes, mais honêtement je pense que très peu de techniques requierent une telle complexité. En général, pour un objet donné on sait toujours quel shader lui sera appliqué, et donc on n'a pas de bidouilles de ce genre à faire, quitte à prévoir plein de versions des shaders avec du code copié-collé.

    Sinon tu peux te la jouer plus finement, et faire en sorte de pouvoir combiner plusieurs shaders en un avec ton programme (par exemple, clairement tout séparer sous forme de fonctions de sorte que ce soit assemblable facilement).

  5. #5
    Membre éclairé
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Par défaut
    Je vais reprendre dès le début:
    Sous OpenGL/GLSL, un shader program est composé d'1 ou plusieurs shader objects, normalement 2: un vertex shader object et un fragment shader object. Ces 2 objets sont linkés donc en 1 seul shader program, à l'instar de la compilation d'un programme normal, où 1 ou plusieurs objets sont linkés en un programme.

    Donc ce qu'il faut faire, c'est prêter attetnion à bien séparer les différents "modules" de ton programme de shader de facon à pouvoir les linker, une fois traduits.

    Et c'est l'instant de faire la pub pour ma lib, KAGEfx, http://www.kagefx.net , qui peut être très utils pour faire cela sous OpenGL. En fait, il te suffit d'écrire tes shaders en GLSL dans un fichier XML qui te servira après à charger te linker directement tes programmes.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 18
    Par défaut
    Je viens de voir que mon dernier message n'a pas été inséré

    Donc je disais que si j'ai bien compris le mieux serait de créer un fichier texte (xml ou autre) afin de combiner différents shaders pour n'en faire qu'un seul.
    Cette idée me paraît bonne et comme le suggère Laurent, je vais tout décomposer en fonctions pour tout assembler facilement.
    J'essaierai de développer tout ca et dès que j'aurai réussi je vous informerai.

    Enfin, si jamais je venais à ne pas réussir, je m'orienterai vers la librairie de Kurisu qui pourrait me simplifier la vie. Mais avant je tiens à essayer par mes propres moyens

    Allez, a bientôt!
    bye

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Par défaut
    plusieurs pistes :

    - utiliser Cg qui a l avantage de permettre de faire des Interfaces. Ceci peut te permettre de combiner, a partir d un seul code source, plusieurs interfaces pour et donc, d une certaine facon, de combiner plusieurs shaders.

    - Plus exotique, regarde ce qui se passe cote SH. C'est un "langage de shader" un peut particulier (et pas tres connu) puisque les shaders sont ecrit directement dans ton code C. Deux avantages :

    - tu peux tres facilement manipuler les "uniforms"

    - tu peux combiner les traitements simplement par des opérations logiques

    -regarder ce qui peut se faire dans la manipulation de text directement dans les sources du shaders, soit en runtime (il y a un article dans un des game programming gems), soit a la compil time (idee subsidiaire Ruby et ERB peuvent te permettre de generer tres facilement plusieurs versions / combinaisons de shaders)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Plusieurs questions en une pour des détails
    Par Yepazix dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 11/01/2013, 21h22
  2. Appliquer plusieurs prédicats pour définir une règle
    Par citron_666 dans le forum Prolog
    Réponses: 7
    Dernier message: 24/08/2012, 10h00
  3. Appliquer plusieurs shaders à un objet
    Par manrugby dans le forum OpenGL
    Réponses: 6
    Dernier message: 14/12/2010, 16h09
  4. Réponses: 1
    Dernier message: 27/11/2008, 11h41
  5. Appliquer un shader sur le rendu final
    Par Lockscash dans le forum DirectX
    Réponses: 10
    Dernier message: 19/06/2007, 17h05

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