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

DirectX Discussion :

Shader d'eau en HLSL pour une application 3D codée en Vrml


Sujet :

DirectX

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 5
    Points
    5
    Par défaut Shader d'eau en HLSL pour une application 3D codée en Vrml
    Bonjour à tous,
    Voilà, je suis stagiaire dans une petite entreprise d'animation 3D et le sujet de mon stage est de coder un shader d'eau en HLSL pour l'intégrer dans du code Vrml (que je n'ai pas écrit ). Etant donné que je n'avais jamais vu ces 2 langages (ni Vrml, ni HLSL), j'ai du les apprendre en l'espace d'un mois donc vous vous doutez que je suis novice dans la matière mais ça va, j'ai bien compris leur fonctionnement. Mon problème est le suivant, je ne sais pas quoi mettre dans mon shader c'est à dire quelles opérations y effectuer. Je sais comment ça marche mais je sais pas comment l'utiliser. Donc si vous pouviez m'aiguiler la-dessus car j'ai fais de nombreuses recherches sur les shaders sur le net et il se trouve que la plupart d'entre eux sont codés en C++ ou pseudo-assembleur. Pourriez-vous me dire:

    - Quelle(s) algorithme(s) et opérations utilisés pour faire un shader (en HLSL) pour de l'eau (style océan) dans le but de l'intégrer dans une application 3D (îlot entouré d'eau) codée en vrml ?

    J'ai trouvé des techniques comme les cube map et les normals map mais je ne sais pas comment les utiliser à l'intérieur d'un shader, ni quoi leur appliquer. Merci de bien vouloir m'aider.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 100
    Points : 150
    Points
    150
    Par défaut
    Je ne pense pas que tu as du voir des shaders codé en C++, ca se saurait

    Les langages de shaders du marché sont : GLSL (pour OpenGL), Cg, et HLSL (pour Direct3D). Et apres il reste l'assembleur

    Comme les langages de shaders ont généralement tres peu de fonctionnalités, tu peux essayer de trouver des tutos d'eau en GLSL et l'adapter en HLSL, ca ne devrait pas etre trop dur, enfin je pense. Apres, trouver un bon tutot ^^

    En tout cas, je connais un shader d'eau (de mer) pas mal foutu est donc le code est libre (il est sous licence GPL, donc il faudra que le reste du code source de ton application passe aussi en GPL, ce qui peut poser probleme a tes employeurs.)
    En meme temps, il est en GLSL, et comme tu va au moins le modifier pour du HLSL, je pense que la GPL ne s'appliquera plus. Mais je peux me tromper.
    En tout cas, les images, textures, etc ne doivent pas etre utilisees pour etre revendues

    http://dangerdeep.sourceforge.net/warning.html

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 5
    Points
    5
    Par défaut
    Merci dolanor,
    t'as effectivement raison, j'ai jamais vu de shader codé en C++ je voulais dire Cg. En tout cas j'ai récupérer les sources sur le site que tu m'a donné et je vais travailler dessus. Ce sera déjà une bonne base pour moi, pour que par la suite je puisse écrire mon propre shader. Pour ce qui est du GPL je pense que ça ne posera pas de problème car je veux juste utiliser le code sur mon application de "test" => îlot (cf post précédent). Je pense que tout ça va bien m'aider, merci. Par contre, vu que tu m'a l'air assez callé niveau shader, je profite pour te poser une petite question (qui risque d'être suivie par bien d'autres ... ):

    Les shaders, on peut les intégrer dans n'importe quelle application 3D ou alors est ce qu ils requièrent des données spécifiques (provenant de l'application dans laquelle ils sont intégrés) passées en paramètre (mis à part les textures, je pense) ?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Points : 275
    Points
    275
    Par défaut
    'Alut.

    Tout d'abord un petit retour sur les shaders...

    Les shaders on pour vocations de remplacer le pipeline fixe. Il y a deux types de shaders:
    _ les vertex shaders qui sont appliqués à chaque vertex,
    _ les pixels shaders qui sont appliqués à chaque pixel.

    Les vertex shaders ont en entré les données envoyés au GPU. Il y a au minimum la position des vertex. Il peut toutefois y avoir n'importe quelle autre paramètres que l'on juge utile (tant que ce paramètre est défini pour chaque vertex). En sortie ils fournissent au minimum la couleur du vertex et sa position transformée.

    Les pixels shaders calculent la couleur des pixels affichées à l'écran. Leur entrées est la sortie du vertex shader (ou bien du pipeline fixe s'il n'y avait pas de VS). En sortie ils fournissent la couleur du pixel.

    Passons à tes questions:
    Les shaders, on peut les intégrer dans n'importe quelle application 3D
    Pour utiliser un shader, il faut signifier au GPU qu'il doit utiliser un shader et non le pipeline fixe. Il y a donc modification du code.

    alors est ce qu ils requièrent des données spécifiques (provenant de l'application dans laquelle ils sont intégrés) passées en paramètre (mis à part les textures, je pense) ?
    Mis à part les paramètres d'entrées, il n'y a pas d'obligation. Toutefois, tu peux lui envoyer des données (constantes ou variables).

    En ce qui concerne la modélisation de l'eau, une simple recherche sous google avec les mots "rendering real time water" te fournira quelques résultats.
    Tu vas te rendre compte que ce sont quasiment toujours les mêmes phénomènes physiques qui rentrent en compte, à savoir, déformation de la 3D, refléction, refraction etc ...
    Tu va ensuite devoir choisir un niveau de réalisme qui dépend surtout de ce que tu désire comme performance. Après, il ne reste plus qu'à coder tout ça...

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Points : 440
    Points
    440
    Par défaut
    Citation Envoyé par Albenejean
    '

    Les vertex shaders ont en entré l ...En sortie ils fournissent au minimum la couleur du vertex et sa position transformée.
    La couleur n est pas requise dans le vertex shader ... juste la position (a partir de laquelle le fragment / pixel shader pourra eventuellement deduire la couleur)

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Points : 440
    Points
    440
    Par défaut
    Dans le SDK nvidia ou ATI , il y a ce genre de code ...

    Question subsidiaire : ton model doit il etre dynamique / statique (comprendre est ce que l eau doit se deplacer par la seule action du temps , ou par l interaction avec un utilisateur) ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par smashy
    Dans le SDK nvidia ou ATI , il y a ce genre de code ...

    Question subsidiaire : ton model doit il etre dynamique / statique (comprendre est ce que l eau doit se deplacer par la seule action du temps , ou par l interaction avec un utilisateur) ?
    Mon model doit être dynamique. L'eau doit se deplacer par la seule action du temps.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 5
    Points
    5
    Par défaut
    Je profite du fait que vous vouliez bien m'aider .
    J'ai une autre question:
    L'application dans laquelle je dois intégrer mon shader est en vrml et ce n'est pas moi qui l'ai écris. J'ai étudié le code et à aucun moment, on n'y retrouve de matrice de projection or dans les shaders, c'est une info qui est quasiment utilisée tout le temps. Alors j'aimerais savoir si avec une simple déclaration de:
    "float4x4 g_WorldViewProj;" dans mon shader,est ce que celui ci saura retrouver les données correspondantes sans qu'elle (la matrice de projection) lui soit passée en paramètre et meme sans qu elle n apparaisse dans le code vrml ?

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Points : 275
    Points
    275
    Par défaut
    La couleur n est pas requise dans le vertex shader ... juste la position (a partir de laquelle le fragment / pixel shader pourra eventuellement deduire la couleur)
    Autant pour moi . Je pensais que s'il n'y avait pas de pixel shader, on devait envoyé une couleur... Mais non.

    "float4x4 g_WorldViewProj;" dans mon shader,est ce que celui ci saura retrouver les données correspondantes
    Non.

    Mon model doit être dynamique. L'eau doit se deplacer par la seule action du temps.
    Dans ce cas il est statique (ie le vertex buffer est constant). C'est le shader (vetx shader) qui va s'occuper de la déformation en fonction du temps (et éventuellement de la profondeur de l'eau).

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 5
    Points
    5
    Par défaut
    Donc si je comprends bien, la matrice de projection doit être passé en paramètre de mon shader ?? Et par conséquent apparaître dans le code Vrml ??

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 5
    Points
    5
    Par défaut
    salut à tous,

    Tout d'abord, merci à dolanor pour ton conseil. J'ai effectivement récupérer le shader du site que tu m'avais envoyé mais c'est chaud à transformer en HLSL car le reste de l'application est en C++ (or pour moi c est du vrml) et par exemple dans le shader y a pas de structure d'entrée du vertex shader ni de sortie, y a des attributs propres a l'appli dont je ne dispose pas (exemple: attribute float amount_of_foam //tableau de quantité ...etc). Donc c est chaud et franchement, je ne m'en sors pas. Je pense que j'ai essayé de trouver autre chose (pourtant ça avait l'air pas mal). Merci quand meme.

    Par contre, quelqu un pourrait il m'expliquer comment on passe du GLSL au HLSL pour les données comme gl_vertex, gl_color, matrice de projection (tout ça en glsl), à quoi ça correspond en hlsl ??
    Est ce que c est juste des déclarations de variables (ou d'attributs dans une structure) du style
    float4*4 worldViewProj; par exemple
    ou encore
    float4 position: POSITION; (correspond à gl_position ou gl_vertex en glsl ??).

    Merci de bien vouloir m'aider, svp.

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Points : 440
    Points
    440
    Par défaut
    Citation Envoyé par mr_mimyl
    float4 position: POSITION; (correspond à gl_position ou gl_vertex en glsl ??).
    de memoire , c est les deux ... :

    -si c est en etre du main , cela correspond a gl_vertex
    -si c est en sortie du main , cela correspond a gl_position

    Je crois bien qu il existe des exe sous windows permettant des conversions entre GLSL et HLSL ... a rechercher peut etre

    Sinon, il y a un bouquin Sur Cg dispo (dont tu trouveras les references sur le site de nvidia) (Cg est me semble t il assez proche de HLSL) et il me semble aussi qui bouquin sur HLSL est sortie il n y a pas tres longtemps.

    Tout ca a verifier, car mon acces internet ici est plus que limiter

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Points : 275
    Points
    275
    Par défaut
    As-tu vu ça ?

    A mon avis ça va t'intéresser!

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 5
    Points
    5
    Par défaut
    Salut à tous,
    Tout d'abord, merci à albenejean pour le site que tu m'as fourni, il est effectivement très intéressant. Les shaders sont pas mal du tout. Le truc après c'est de comprendre comment ça marche pour pouvoir l'adapter à mon application vrml (en effet il y a plusieurs fichiers fx pour une meme application c++). Enfin, je vais déjà voire, l'algo qui tourne derriere et puis je l'adapterais si c'est possible (car le vrml n'est pas trop adequat pour faire ça). Sinon, j'ai commencé à écrire une ébauche de shader, j'essaie de l'améliorer (car pour l'instant on ne voit pas grand chose ) et je vous tiens au courant. Si vous avez des tuyaux et des conseils à me donner n'hésité pas, je suis ouvert à toute suggestion. Merci.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 100
    Points : 150
    Points
    150
    Par défaut
    Ah, zut, en effet si en VRML y'a pas moyen de passer de paramètres au shaders :/

    D'ailleurs, même un shader d'eau avec une vague en sinusoide ne devrait pas fonctionner ?


    Et sinon, il me semble que ATi fournit le programme pour transformer du HLSL en GLSL... [EDIT]http://sourceforge.net/projects/hlsl2glsl

    Y'a ptet une sorte de table de comparaison/remplacement fournie avec pour voir les modif dans le sens hlsl -> glsl et l'inverser ?

    Et sinon, un bon logiciel pour faire des Shader
    RenderMonkey (pour une fois que je pousse un truc d'ATi ^^)

    [EDIT] Merde de merde, c'est en GLSL aussi, lol :/

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Points : 440
    Points
    440
    Par défaut
    Citation Envoyé par dolanor
    Et sinon, un bon logiciel pour faire des Shader
    RenderMonkey (pour une fois que je pousse un truc d'ATi ^^)
    Perso, j aurais plutot dit un EXCELLENT logiciel ...

  17. #17
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 5
    Points
    5
    Par défaut
    J ai effectivement téléchargé RenderMonkey. Je ne le maîtrise pas encore d autant plus que je ne maîtrise pas encore les shaders. En parlant de shader, pourriez-vous m'éclaircir sur certains points concernant les textures. En général, ce ne sont que les textures qu il y a à passer au shader ?? Et j'ai vu dans plusieurs shaders, l'utilisation des textures normalmap, heightmap, fresnelmap, reflectionmap et refractionmap. Y a certaines dont je comprends l'utilité comme la reflectionmap et la refractionmap (meme si je ne sais pas comment les obtenir ??) mais pour les autres je ne vois pas comment elle agissent dans le shader (heightmap, fresnelmap). Derniere question, peut on récupérer des normals map (et autres) déjà faîtes sur le net et les utiliser dans n'importe quel shader ??

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Points : 440
    Points
    440
    Par défaut
    une texture, c est juste un tableau 2D de texels. Un texel n est ni plus ni moins qu'une structure (r,g,b (a)) de valeurs (entiere ou flottante). En conclusion une texture n est ni plus ni moins qu un tableau de valeurs.

    On peut donc y encoder n importe quoi. Prenons une fonction f(x) avec x dans [0,1].

    On peut coder cette fonction directement dans le shader. En revanche, si le calcul s avere couteux en temps. on pourra precalculer f pour un echantillon de x. on stocke le contenu dans une texture. Le shader n a plus qu une operation de lecture de texture a faire alors.

    Dans un shader, tu peux utiliser toutes les textures du monde (si bien sur leurs taille correspond (souvent dimension < 4096x4096 , carre , cote a une longueur puissance de deux)).


    Note : si tu veux te mettre au shader, je pense que rendermonkey est effectivement la solution. Pas une ligne de code C a ecrire pour pouvoir afficher un model et lui appliques des textures. Tu te concentres donc au max sur les shaders, plutot que de lutter avec OpenGL

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 20
    Points : 5
    Points
    5
    Par défaut
    Salut a tous,
    merci pour vos conseils. Je ne doute pas que RenderMonkey soit un super logiciel pour écrire des shaders cependant ne le maitrisant pas encore, je n ai malheureusement pas assez de temps pour m y mettre.
    Par contre, j aimerais utiliser une clip map dans mon shader. Ma question est: Cela est il faisable (clip map) directement dans mon shader en hlsl ?
    Je vous pose la question car j ai fais des recherches et j ai vu que cette methode est souvent utilisée mais comme je l ai dis précédemment, je dois intégrer mon shader dans du vrml et je ne dispose pas de tous les éléments nécessaire a mon shader et je ne crois pas qu on puisse faire du clipping avec du vrml (reprenez moi si je me trompe).

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 366
    Points : 440
    Points
    440
    Par défaut
    perso, c est la premiere fois que j etends parler de clip map

Discussions similaires

  1. Comment faire des etats pour une application web ?
    Par ovh dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 06/07/2021, 03h25
  2. [Executable]creation d'un batch pour une application
    Par tarik75 dans le forum Général Java
    Réponses: 4
    Dernier message: 03/08/2005, 15h33
  3. [Tomcat] définir un port pour une application
    Par Mrlud dans le forum Tomcat et TomEE
    Réponses: 10
    Dernier message: 14/06/2005, 17h33
  4. [Compilation] A quel moment pour une application ?
    Par Rick1602 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 04/03/2004, 20h36

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