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

API graphiques Discussion :

Deferred shading: comment faire du normal mapping


Sujet :

API graphiques

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut Deferred shading: comment faire du normal mapping
    Bonjour,

    J'ai implémenté du deferred shading/lighting dans mon moteur et cela fonctionne bien. J'aimerais bien introduire le normal mapping mais je ne vois pas comment faire cela.

    - Sans deferred shading, c'est super simple: on calcule un vecteur dans l'espace tangent dans le vertex shader: "tbnDirToLight = tbnMatrix * (light.position - vertex)". Dans le fragment shader, il suffit de faire un 'dot product' avec la normal de la normal map et avec notre vecteur 'tbnDirToLight'.

    - Avec du deferred shading: comment faire ? Calculer mon vecteur 'DirToLight' dans l'espace tangent dans mon fragment shader ? Ca risque d'être très lourd, non ?

    Merci d'avance.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Points : 1 630
    Points
    1 630
    Par défaut
    A mon avis tu dois le faire pendant la passe de geometrie du vertex shader du deffered shading et pas apres pendant le shading.
    Je ne réponds à aucune question par MP, posez vos questions sur le forum adéquat.
    Profils : G+ - LinkedIn

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    Si j'ai bien compris ton message, je dois faire un calcul dans la première passe: c'est à dire quand je remplis mes buffers de depth, color, specular and normal ?

    Qu'est-ce que je calcule dans ce vertex shader ? L'espace tangent (normal, tangent, binormal) ? Et ensuite dans mon fragment shader, je modifie chaque normal de ma normal map dans l'espace tangent ? C'est assez coûteux par rapport a du non-deferred shading.
    Si c'est la seul solution je ferais avec...

  4. #4
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 450
    Points : 1 630
    Points
    1 630
    Par défaut
    Deja dans un premier temps pour clarifier les choses: je n'ai jamais implement le deferred shading ni le normal mapping donc il peut y avoir des details d'implementation que je ne vois pas, j'essaye juste de te donner des idees apres a toi de voir si ce que je dis est bon ou pas . Si quelqu'un s'y connait plus dans le domaine, qu'il se manifeste.

    Ensuite, premiere question: avec le normal mapping, tu fais le shading dans l'espace tangent? Pas dans l'espace camera? Ensuite je sais pas mais le deferred shading ca consiste a avoir les informations de position et de normale (ainsi que de materiau) dans des buffers pour pouvoir ensuite faire le shading en deferred.

    Si j'ai bien compris le normal mapping, ca consiste a perturber la normale d'une geometrie en utilisant une normal map. L'output est donc le meme qu'un rendu classique excepte que tu dois passer dans une texture lookup pour pouvoir determiner la normale pour le shading.

    Mais le shading est fait dans une autre passe. Donc je ne comprends vraiment pas le probleme que tu as pour faire du shading sur des geometries classiques et des geometries avec du normal map. Ca devrait etre la meme chose!

    En gros:
    • rendu classique, output: position + normal + materiau
    • rendu avec normal map, output: position + normal (avec un texture fetch) + materiau


    Apres:
    deferred shading avec ces inputs.

    C'est la meme chose!
    Je ne réponds à aucune question par MP, posez vos questions sur le forum adéquat.
    Profils : G+ - LinkedIn

  5. #5
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    Par défaut
    Bonjour,
    Le principe du deffered shading est de séparer ou différer (deffered) les étapes de rendu ( le shading) donc, il y a 4 étapes, les 2 premières et les 2 dernières sont séparées, les voici:

    1. Computing geometry shape (that is, the triangle mesh)
    2. Determining surface material characteristics, such as the normal, the bidirectional reflectance distribution function, and so on
    3. Calculating incident light
    4. Computing surface/light interaction, yielding the final visual

    Voici différents liens importants:
    http://http.developer.nvidia.com/GPU...ems3_ch19.html
    http://http.download.nvidia.com/deve...ed_Shading.pdf
    Homer J. Simpson


  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Points : 230
    Points
    230
    Par défaut
    Merci pour vos réponses.

    Finalement, dans la première passe de mon algo, j'ai multiplié chaque pixel de ma normal map par l'inverse de la matrice TBN (tangent, binormal, normal). Ensuite j'utilise les valeurs calculées dans la deuxième passe de mon algo pour calculer l'éclairage.

    C'est certe plus couteux que de faire du normal mapping sans deferred shading mais je n'ai pas trouvé de meilleure solution.

  7. #7
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Pour que le deferred shading soit intéressant il faut tout de même que le shader et la scène dépasse une certaine complexité (réduction de l'overdraw et du nombre de passes "géométriques").

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

Discussions similaires

  1. [XL-2010] Comment faire du File Mapping en VBA
    Par pikron dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/07/2013, 12h51
  2. Réponses: 2
    Dernier message: 23/04/2010, 11h11
  3. Comment faire du shadow mapping sans shader?
    Par drcd dans le forum OpenGL
    Réponses: 49
    Dernier message: 17/11/2009, 02h35
  4. Réponses: 2
    Dernier message: 01/05/2008, 16h13
  5. Comment faire du bump mapping
    Par CladStrife dans le forum DirectX
    Réponses: 7
    Dernier message: 01/01/2004, 05h07

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