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

WebGL Discussion :

Shader GLSL lancer de rayon pour faire des ombres


Sujet :

WebGL

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Développeur 3D
    Inscrit en
    Août 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D

    Informations forums :
    Inscription : Août 2014
    Messages : 23
    Points : 33
    Points
    33
    Par défaut Shader GLSL lancer de rayon pour faire des ombres
    Bonjour,
    Je cherche à faire un shader en glsl qui permettrait de générer des ombres au sol par lancer de rayon. C'est-à-dire qu'on pourrait lancer un rayon entre le sol et la lumière et s'il y a un objet entre les deux on dit que le pixel du sol est dans l'ombre.
    Voilà comment je vois les choses : je crée un plan, je charge un objet 3D, j'applique un shader sur le plan, dans le vertex shader je mets rien de spécial par contre dans le fragment shader :
    -je récupère les coordonnées de ma lumière
    -je regarde si l'objet 3D est sur le segment entre la lumière et le fragment actuel et si c'est le cas, on met le fragment actuel dans l'ombre

    Je sais créer un plan, charger un modèle 3D, avoir les coordonnées de la lumière, par contre je ne ne sais pas du tout comment savoir si l'objet 3D est sur le trajet entre le fragment et la lumière.

    PS : j'ai aussi trouvé une méthode qui fait des ombres parfaites qui s'appelle le "path tracing"; l'inconvénient c'est que pour l'instant tout le monde l'a fait sur des primitives et j'ai rien trouvé sur des modèles 3D importés.

  2. #2
    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,

    En effet, le « path tracing » ne marche que pour des géométries simples, ou plus précisément, des surfaces implicites.
    Pourquoi avez vous absolument besoin d'un lancer de rayon ? En théorie, c'est une bonne idée, mais c'est une technique difficile à appliquer en temps réel.
    Vous avez l'alternative classique ici : http://jeux.developpez.com/tutoriels...hadow-mapping/ mais j'imagine que vous connaissiez déjà.

    Pour que votre technique fonctionne, il faut que pour chaque rayon que vous lancez de la lampe, vous testiez tous les triangles de votre polygone. Je peux vous dire, ça prends du temps et surtout, cela contrarie la carte graphique (elle n'aime vraiment pas faire des boucles, contenant des tests). Sachant que le temps a passé dans un fragment shader est limité (il y a une protection qui fait quitter le programme si on y passe trop de temps).
    Il faut aussi comprendre que de base, le fragment shader n'a que les informations sur les textures et sur le pixel actuel. Rien de plus. En effet, il est là, que pour colorier du pixel, pas pour tester les géométries. Du coup, il faut envoyer tous le tampon de la géométrie dans le fragment shader (ok, donc passer par une texture), puis la parcours pour chaque ... pixel.
    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
    Nouveau membre du Club
    Femme Profil pro
    Développeur 3D
    Inscrit en
    Août 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D

    Informations forums :
    Inscription : Août 2014
    Messages : 23
    Points : 33
    Points
    33
    Par défaut
    ohlala effectivement ça a l'air long et coûteux.
    personnellement je ne m'y connais pas trop en techniques d'illumination ou ombrage mais ce travail m'a été demandé par un graphiste qui aimerait obtenir par code une méthode d'ombrage aussi précise que sur son logiciel (Softimage); logiciel sur lequel il peut contrôler le rendu et le rendre plus ou moins flou, plus ou moins précis, avec un dégradé de niveaux de gris en fonction de la distance de l'objet par rapport au sol, tout un tas de paramètres comme ça.
    Au début j'ai fait du shadowmapping avec threejs, rapide et efficace mais à part choisir si c'est flou ou non avec shadowmapsoft, je n'ai pas trop vu de solutions pour contrôler d'autres paramètres de l'ombre.
    En voyant ça mon graphiste m'a recommandé le lancer de rayon parce que c'est comme ça que ça s'appelle sur Softimage. D'où ma recherche sur ce sujet.

    Ma question est la suivante : peut-on faire de l'ombrage très précis et poussé avec les shadowmaps de threejs?

  4. #4
    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
    Avec les shadowmaps, on peut tenter d'augmenter la résolution de la shadowmap + faire une technique de floutage suivant la distance de l'objet avec le point de l'ombre. Par contre, je ne sais pas exactement l'implémentation de cette idée assez récente.
    SoftImage, je pense qu'ils ne sont pas en temps réel. Du coup, ça change toute la problématique. En effet, un lancer de rayon n'est pas capable de faire une image toutes les 16 ms. Enfin, maintenant, c'est un peu moins vrai, mais ça reste une vérité. Là dessus SoftImage a un avantage, c'est qu'il a tout le temps, pour bien calculer ce qu'il veut.
    Le GLSL n'est pas vraiment fait pour faire du lancer de rayon (pour les raisons expliquées ci-dessus). Par contre, il existe le raymarching : http://jeux.developpez.com/tutoriels...#raytracing-3d (c'est cette technique, qui ne peux avoir de vrai objet, mais que des surfaces implicites (des fonctions mathématiques). Bon après, je peux me tromper.
    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. [SWT] Api pour faire des graph ?
    Par bawan dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 05/09/2005, 13h13
  2. Réponses: 7
    Dernier message: 16/04/2005, 08h55
  3. [Graphes] Pour faire des graphiques ?
    Par Kyti dans le forum 2D
    Réponses: 3
    Dernier message: 29/03/2005, 15h55
  4. [audio] logiciel pour faire des .au ?
    Par Seiya dans le forum Multimédia
    Réponses: 7
    Dernier message: 05/01/2005, 00h41
  5. problème pour faire des blocs
    Par tinkye_winkye dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 04/01/2005, 14h13

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