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

Moteurs 3D Discussion :

Illumination globale vs temps reel


Sujet :

Moteurs 3D

  1. #21
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Points : 2 640
    Points
    2 640
    Par défaut
    Salut,

    Effectivement la plupart des techniques ont un FPS très bas, impraticable en dehors de petites scènes. Toutefois les recherches font beaucoup de progrès sur ce domaine, ne serait-ce qu'en 2008 j'ai du recenser au moins une quinzaine de nouvelles techniques ou d'améliorations d'anciennes techniques, donc ça avance, doucement .

    Après c'est un compromis à faire. Il existe pas mal de techniques TRES efficaces et qui pour le coup sont exploitables en temps réel, mais soit avec la géométrie fixe, ou les lampes fixes, ou les deux...

    Par contre, on emploie (moi aussi...) souvent le mot global illumination, mais en fait là on parle surtout de l'éclairage indirect. Le mot global illumination englobe d'autres effets (comme les caustics).

    Il y a une technique qui m'est venu en tête après toutes ces lectures: Une façon d'approximer qui est optimisé et qui donne un résultat convaincant, est de faire un rendu de profondeur à partir de la light, il peut être le même que celui utilisé pour faire l'ombrage en gardant les couleurs et les normales. Ensuite on choisi quelques pixels( au moins 5 je dirais) prédéfinis et on enregistre le vecteur des ray qui part de la light et qui reflète sur la normale des pixels et on fait la moyenne de tout les vecteurs, en même temps on prend la moyenne de couleur tout les pixels et on forme une light ambiante avec ce vecteur. Sinon, on peut faire plusieurs light avec ces vecteurs, mais c'est sûr que c'est plus optimisé de créer une light avec la moyenne.
    Ça ressemble aux Reflective Shadow Maps ce que tu me décris là non ?

    En fait, j'avais lu une ligne où il était marqué de créer une vecteur qui fait la moyenne dans Real Time Rendering third edition, c'est de là que me vient l'idée en partie, et une technique similaire est utilisé pour ce sdk commercial : (http://www.youtube.com/watch?v=ewQuQ...eature=related) En fait, ce serait la technique utilisée dans la première scène, selon le livre.
    Fait attention aussi... J'avais lu sur un forum (après c'est peut-être de la jalousie de la part de certaines personnes ) qui ont analysés en détail les vidéos d'Enlighten et visiblement il y aurait pas mal de trucs précalculés ce qui entraîneraient quelques concessions sur certains niveaux...

    En tout cas, je ne sais pas si tu as lu cette publication, mais personnellement parmi toutes ces publications qui reposent plus ou moins sur la même technique de base, je trouve celle-ci particulièrement élégante et puissante.

    Environ 75 fps pour 12 000 vertices et 12 fps pour 125 000 vertices. Même si ça reste relativement peu, la technique en elle-même est vachement élégante puisqu'elle repose sur un système "hybride" raytracing-rasterization, où tout l'éclairage indirect (ainsi que les ombres indirectes, automatiquement gérées par l'algorithme et qui te permet donc de te passer d'un truc pour imiter comme l'ambiant occlusion) est calculé par le raytracing et l'éclairage direct, primary rays, shadow maps et tous les autres effets par la rasterization !

    Contrairement aux autres techniques comme tu dis où tu dessines la scène à partir du point de vue de la lampe (qui, d'une, empêche d'avoir un moyen simple pour les point light, et de deux t'empêche très vite d'ajouter d'autres lampes !), là tu peux facilement avoir plusieurs lampes. Idem pour le nombre de "bounce" de la lumière, dans cette technique un bounce équivaut, en gros, à traverser une liste de lien générée par ton raytracing...

    D'autre part je pense que cette technique est sûrement une technique de choix, tu n'as qu'à voir Lightsmark, un autre moteur comme ça (encore plus impressionnant que Enlighten, surtout que là tu peux tester ) repose lui aussi sur un schéma hybride rasterization-raytracing. Je pense aussi qu'elle peut être améliorée. Ils utilisent un kd-tree qu'ils recréent à chaque fois "from scratch" (pour pouvoir avoir des scènes dynamiques). J'avais codé un BVH et, sans trop d'optimisation, j'obtenais des temps de création pour les mêmes scènes de presque moitié moins de temps. D'autant plus qu'il existe des techniques plus évoluées pour les BVH qui te permettent de mettre un jour un BVH de manière très rapide.

    Si tu veux voir une vidéo de la technique, clique .

    Si tu souhaites parler de cette technique n'hésite pas, je l'ai pas mal étudié et, à part quelques petits points qui me résistent encore je l'ai lu tellement de fois que je commence à le connaître presque par cœur (par contre je pars dans 1 heure en vacance donc t'étonne pas is je réponds pas ^^)

  2. #22
    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
    Citation Envoyé par Bakura Voir le message
    Fait attention aussi... J'avais lu sur un forum (après c'est peut-être de la jalousie de la part de certaines personnes ) qui ont analysés en détail les vidéos d'Enlighten et visiblement il y aurait pas mal de trucs précalculés ce qui entraîneraient quelques concessions sur certains niveaux...
    facteurs de forme..

    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

  3. #23
    Membre actif
    Avatar de Mikmacer
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 116
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par Bakura Voir le message
    Ça ressemble aux Reflective Shadow Maps ce que tu me décris là non ?
    Dans cette technique ils utilisent chaque pixels comme une lumière, il me semble. Ce que j'avais comme idée, c'était de faire la moyenne de quelques pixels, et de créer une sorte de lumière ambiante dirigée par un vecteur, applicable pour une pièce, par exemple.

    Citation Envoyé par Bakura Voir le message
    En tout cas, je ne sais pas si tu as lu cette publication, mais personnellement parmi toutes ces publications qui reposent plus ou moins sur la même technique de base, je trouve celle-ci particulièrement élégante et puissante.
    Cette technique est intéressante, mais ils utilisent CUDA. Je me demande si c'est compatible avec beaucoup de hardware.... Par contre, la technique peut être bonne pour être porté sur d'autres environnements semblables.

    Citation Envoyé par Bakura Voir le message
    D'autre part je pense que cette technique est sûrement une technique de choix, tu n'as qu'à voir Lightsmark, un autre moteur comme ça (encore plus impressionnant que Enlighten, surtout que là tu peux tester ) repose lui aussi sur un schéma hybride rasterization-raytracing. Je pense aussi qu'elle peut être améliorée. Ils utilisent un kd-tree qu'ils recréent à chaque fois "from scratch" (pour pouvoir avoir des scènes dynamiques).
    Lightmark est probablement un des plus impressionants. Comment as-tu eu l'info sur la technique utilisée?

    J'ai le projet d'implémenter une approximation du GI dans mon moteur temps réel fait avec OpenGL, pour l'instant, je n'ai pas encore décidé de la technique à utiliser... Reste qu'il faut que je finalise la base de mon moteur avant.

  4. #24
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Points : 2 640
    Points
    2 640
    Par défaut
    Cette technique est intéressante, mais ils utilisent CUDA. Je me demande si c'est compatible avec beaucoup de hardware.... Par contre, la technique peut être bonne pour être porté sur d'autres environnements semblables.
    Rien ne t'empêche d'effectuer le lancer de rayons avec le CPU.


    Lightmark est probablement un des plus impressionants. Comment as-tu eu l'info sur la technique utilisée?
    Sur Beyond3D, l'auteur de Lightsmark avait parlé rapidement de la technique, et il disait qu'il utilisait le raytracing.

  5. #25
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 145
    Points : 194
    Points
    194
    Par défaut
    Citation Envoyé par Mikmacer Voir le message
    Cette technique est intéressante, mais ils utilisent CUDA. Je me demande si c'est compatible avec beaucoup de hardware....
    http://www.nvidia.com/object/cuda_learn_products.htmlvoila...

    Citation Envoyé par Bakura Voir le message
    Rien ne t'empêche d'effectuer le lancer de rayons avec le CPU.
    Quoi? lancé de rayon calculé par le CPU? ça me rappelle mes débuts en 98... 10mn par image (fin du troll)
    Perso, je pense que faire de l'illumination globale ok c'est beau mais ça sert à rien si on a pas penser parallélisation avant dans l'implémentation du moteur.
    J'ai donc une tite question: un moteur de rendu open source (oui oui moi vouloir voir le code derrière ^^) faisant illumination globale, photon map; ça existe???

  6. #26
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Points : 2 640
    Points
    2 640
    Par défaut
    Quoi? lancé de rayon calculé par le CPU?P
    Tu serais étonné de voir tout ce qu'on peut faire avec un CPU (regarde du côté des travaux d'Ingo Wald ^^).

  7. #27
    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
    Citation Envoyé par Mikmacer Voir le message
    Cette technique est intéressante, mais ils utilisent CUDA. Je me demande si c'est compatible avec beaucoup de hardware....
    ~50% du marché des gamers (sur Steam ce qui n'est certes pas représentatif de la totalité du marché PC mais une bonne indication du marché des gamers) est capable de faire tourner du code Cuda (c'est même plus si l'on ne compte pas les vieilles cartes qui ne font plus tourner les jeux récents) :
    http://store.steampowered.com/hwsurvey/videocard/

    C'est pas mal en terme de nombre de processeurs installés rien que pour les jeux (c'est beaucoup plus que le nombre de machines qui peuvent faire tourner d3d10 par exemple).

    Pour les applications spécialisées (rendu film, météo, finance, pétrole, recherche scientifique), les compagnies achètent directement les serveurs donc le problème de la base installée n'est pas aussi primordial.

    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

  8. #28
    Membre actif
    Avatar de Mikmacer
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 116
    Points : 241
    Points
    241
    Par défaut
    Depuis la dernière fois que j'ai posté ici, j'ai eu le temps d'essayer plusieurs choses :

    J'ai implémenté un shader SSAO sous Horde3D, et en même temps j'ai changé mon implémentation pour du SSGI, mais les premiers tests que j'ai fait étaient horrible!! Je ne crois pas que ce soit une bonne direction à prendre...

    En ce moment je travail sur un futur moteur Open Source sous XNA. Pour la détection de collision j'ai implémenté un "BSP Tree", ce qui offre la possibilité de lancer plusieurs rayons assez efficacement.

    Récemment, j'ai décidé de créer une vague approximation de la réflexion avec un algorithme assez simple à implémenter :

    1-pour chacun des triangles on enregistre une valeur de couleur provenant de la texture
    2-Lancer une nombre arbitraire de rayon par lumière de type "Spot Light".
    3- On calcul la moyenne des couleurs des triangles atteints.
    4 Avec cette moyenne on crée une lumière ambiante dirigée par la moyenne des directions de la réflexion du rayon par la normale du triangle

    On peut faire à peu près la même chose pour chacune des réflexions, mais je n'irais à pas plus que deux bonds. Les trois bond d'une lumière peuvent êtres calculé par une pass de shader ce qui est assez optimisé. Bien sûr, ça reste une très vague approximation.

  9. #29
    Membre éclairé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Points : 764
    Points
    764
    Par défaut
    Je n'ai pas lu l'intégralité du sujet, mais je me souviens avoir lu cet article. J'avais gardé en mémoire l'aspect "ambient occlusion pas chère avec radiosity", à vous de voir les contre parties que ça implique...
    J'espère que ça vous aidera

  10. #30
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Points : 2 640
    Points
    2 640
    Par défaut
    J'avais vu cet article sur Gamedev, c'est très beau ^^.

  11. #31
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Points : 2 640
    Points
    2 640
    Par défaut
    Un nouveau papier aux résultats impressionnants.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/12/2004, 18h22
  2. Stats : connaitre en temps reel les requetes en cours d'exec
    Par jeff37 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/12/2004, 18h01
  3. [Info][Debutant(e)]affichage temps reel
    Par nine dans le forum Développement Web en Java
    Réponses: 15
    Dernier message: 26/11/2004, 18h03
  4. Réponses: 5
    Dernier message: 19/07/2004, 18h27
  5. Linux et le temps réel
    Par Shrem dans le forum Administration système
    Réponses: 6
    Dernier message: 11/12/2002, 09h21

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