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 :

Meilleure architecture pour un moteur 3D


Sujet :

Moteurs 3D

  1. #81
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ca a l'air très sympa, un petit exemple peut-être ?

  2. #82
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    D'accord. Voici deux exemples : un mesh et un shader :
    exemple 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    mesh {
      element {
        shape {
          type triangle;
     
          vertex {
            x 50;
            y 50;
            s 0;
            t 0;
          }
     
          vertex {
            x 100;
            y 50;
            s 1;
            t 0;
          }
     
          vertex {
            x 75;
            y 100;
            s 0.5;
            t 1;
          }
        }
      }
    }
    On enregistre ce script dans un fichier .mesh.
    Le mesh est subdivisé en elements, chaque element a son propre gizmo, c'est à dire qu'on peut le positionner et le redimensionner et le tourner librement. de plus, chaque element peut avoir son propre shader.

    Maintenenat, voici un shader :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    shader {
      pass {
        map texture1.jpg
        minfilter linear_mimap_linear;
        magfilter linear;
        blend off;
        color {
          r 1;
          g 0.1;
          b 0.5;
          a 1;  
        }
      }
     
      pass {
        map texture2.jpg
        minfilter linear_mimap_linear;
        magfilter linear;
        blend on one one_minus_src_color;
        color {
          r sin 0 2000 0.2 1;
          g sawtooth 0 2000 0.2 1;
          b 0.5;
          a 1;  
        }
     
        translate {
          s sin 0 2000 0 1;
          t cos 0 2000 0 1;
        }
     
        rotate {
          angle triangle 0 2000 0 360;    
        }
      }
     
    }
    Le principe des shaders est le suivant : on applique plusieures passes sur l'objet à dessiner, autant de passes que de sections pass dans le shader. les paramètres sont, pour la plupart controlables via des fonctions comme le sin, le cos ...

    Ceci est loin d'être une explication complète, je le sais, et c'est pourquoi je suis en train de développer une réference pour les shaders et les mesh, pour pouvoir les publier plus tard, quand j'arriverais enfin à :
    1- arriver à une version de base de toodee qui marche et qui trace les grands lignes à suivre
    2- arriver à créer un site fonctionnel pour pouvoir partager mon experience avec tout le monde, et avoir de l'aide, car franchement, je suis en train de couler sous la quantité immense de travail nécessaire !

    En attendant, je suis ouvert à toutes vos suggestions, alors n'hésitez pas à en donner !

  3. #83
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Ca à l'air vraiment sympa !

    Mais juste une question qui me vient à l'esprit, pourquoi ne pas avoir utilisé du XML pour formatter ton langage de script (en tout cas pour la partie mesh / shaders) ? Ca serait plus "ouvert" vers l'exterieur, par exemple si tu veux que des personnes contribuent en écrivant des scripts d'export, ou des tools pour ton moteur.

    Mais ce n'est qu'une suggestion comme ça En tout cas je suis vraiment impressionné par la qualité de ton travail, toutes mes félicitation, rien que pour avoir eu le courage de pousser ton moteur jusque là malgré tout ce que ça a du demander !

  4. #84
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Merci beaucoup. C'est vrai que je galère comme un fou et ce n'est pas du tout evident de trouver le temps pour mon sport favorie : la programmation.

    Concernant la partie concernant XML, j'y avais pensé au début, et je comptais l'utiliser, mais ça m'a eu l'air trop lourd et trop géneraliste pour mes besoins, de plus, j'essai de limiter les dependances de mon moteur à l'exterieur au strict minimum : si je peux réaliser un truc, et qu'il y'a une biblio qui réalise le même truc, je prefère la réaliser moi même. C'est un peu bête, mais ca aide bcp à apprendre.

    De plus, le BOSL (le langage de script que j'ai développé) n'est pas si difficile que ça, et on peut facilement l'apprendre et l'utiliser.

  5. #85
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Et tant que j'y pense, il est tout à fait possible de rendre le moteur indépendant du langage de scripting, en passant comme paramètre supplementaire à toute fonction qui est chargé de charger un fichier un objet loader en plus du nom du script ! ce serait un peu merdique à coder mais ça reste possible !

  6. #86
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Modjo
    Merci beaucoup. C'est vrai que je galère comme un fou et ce n'est pas du tout evident de trouver le temps pour mon sport favorie : la programmation.

    Concernant la partie concernant XML, j'y avais pensé au début, et je comptais l'utiliser, mais ça m'a eu l'air trop lourd et trop géneraliste pour mes besoins, de plus, j'essai de limiter les dependances de mon moteur à l'exterieur au strict minimum : si je peux réaliser un truc, et qu'il y'a une biblio qui réalise le même truc, je prefère la réaliser moi même. C'est un peu bête, mais ca aide bcp à apprendre.

    De plus, le BOSL (le langage de script que j'ai développé) n'est pas si difficile que ça, et on peut facilement l'apprendre et l'utiliser.
    Réinventer la roue, c'est super génial

    Le plus simple, template avec un paramètre par défaut contenant le loader DOSL ou XML ?

  7. #87
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Mauvais nouvelle pour les C++iens ! Le projet est entièrement développé sur Delphi ! Il s'agit d'une DLL qui exporte des interfaces, donc, normalement, ca devrait être possible de l'utiliser à partir du C++ par exemple, mais je n'en suis pas sur.

    Sinon, une première version completement fonctionnele de toodee est enfin disponible, et je suis en train d'effectuer des tests la dessus et de la peaufiner.

    Il me reste de trouver un hébergeur gratuit et de réaliser un site. Mais le plus difficile est déja fait !

  8. #88
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    salu modjo tu m'as l'air de bien te prendre la tete =) en gros pour les eclairage on peut dire qu'il ya deux facon principale de les calculer soit calculer les couleur
    1. soit calculer une couleur pour chaque polygone ou vertex en utilisant sa normale et en faisant des dot product avec le vecteur lumiere/vertex et la normale et en prennant en compte les parametre des materiaux le dot product a la particularité de donner zero en cas de face perpendiculaire et 1 en cas de vecteur normalisé oposé ce qui donne que les face/vertex ayant une normale face a la lumiere auront la couleur diffuse du material + ambient et ceux qui ont une normale perpendiculaire auront uniquement la couleur ambient. le speculaire sert ensuite a faire un effet de brillance la valeur du specular est plus forte qd le vecteur reflechi lumiere/eye est proche de la normale et le parametre SHININESS de materiaux sert a calculer l'exposant de cette valeur et ca permet d'avoir une tache de lumiere plus ou moins petite a certain endroit
    2. soit on peu aussi utiliser une texture pour avoir les pixel qui sont entre les vertex soient en utilisant l'envmap ou autre

    le tout etant d'avoir une variation de la couleur des pixel selon l'orientation des faces par raport a la/les lumiere

    pour l'architecture general je pense le mieux est d'abbor d'avoir une librairie de math vecteur/matrice assez solide etant donné que la plupart des effets ne sont en fait que des math et physics vectoriels pour calculer des couleur ou uv que ce soit pour de la refraction/reflection/lumiere et des bonnes classes de vecteur/uv qu'on peut utiliser pour avoir des uv, ou des couleur en fonction d'autre vecteur c'est ce qu'il faut pour reussir la plupart des effet et avoir des rendu 'realistes'

    et au fait les dll ne ralentisse pas l'execution le code des dll etant chargé dans l'espace du process qd l'exe est chargé ca peut ralentir un poil le lancement parce qu'il faut charger les dll en memoire et resoudre les symbole de l'exe principale mais une fois ceci fait l'execution n'est pas plus lente sauf peut etre si on prend en compte le cache du cpu qui ne doit pas etre optimisé bien parcque les differentes fonction on plus de chances d'etre eloignées en memoire =)

  9. #89
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    j'ajouterai aussi a cela que ce qui bride bien souvent la vitesse du rendu est effectivement la vitesse des bus pci/agp et pour avoir les meilleur performance il vaut mieux eviter un maxium les transfer entre la ram et la carte graphique et aligner un maximum les donnée envoyée et utiliser de preference des vertex buffer pour stocker les vertex dans la carte graphique une seule fois et sinon utiliser des pointer aligné sur 32/64bit pour transfer des donnée via glVertex*v(); ou utiliser des array et drawelement ca diminue le nombre de requete envoyée a la carte et augmente donc la bande passante disponible pour les vertex et autre donnée

  10. #90
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Merci les gars de vous interresser toujours à ce topic malgré son age et la frequence médiocre de mes réponses.

    Pour ce qui est des transferts RAM<-->GPU, notamment pour la géometrie, je me suis en effet penché ladessus, et j'ai remplacé les pauvres glVertex3f par des glVertexPointer etc..., mais sans utiliser les VBO : Je ne sais pas pourquoi, mais sur ma carte ATI Radeon 9200 les VBO font chuter les performances d'une façon drastique, allez donc comprendre pourquoi !

    Pour ce qui est de l'éclairage, je l'ai enfin implanté dans mon moteur. Bon, je vais essayer d'en expliquer le principe. Mais avant ça, je vais revenir un peu sur les meshes et les shaders dans toodee.

    Un mesh est une classe qui permet de stocker la géometrie des objets.

    Les shaders servent à controler la manière dont une surface est remplie.

    un objet dans toodee est un couple (mesh, shader) complété par un gizmo qui sert à controler sa position, sa rotation, etc ...

    à part les mesh, tout est dynamique dans toodee, par exemple une couleur dans un shader peut varier en sinus au cours du temps, de même, la position x par exemple peut varier selon une autre fonction, bref, presque tout est dynamique.

    J'ai trouvé que la manière la plus simple et élegante d'integrer l'éclairage dans mon moteur est d'utiliser la puissance des meshs et des shaders.

    Une lumière est don similaire à un objet, sauf pour ce qui est de l'utilisation.

    Le rendu d'une image se déroule comme ceci :
    - on part d'une scène vide dont la couleur est la lumière ambiante (Ra, Ga, Ba)

    - on dessine les lumières (dessiner le mesh en le remplissant avec son shader associé) avec un blend activé GL_ONE, GL_ONE pour additionner les contributions des lumières.

    - effectuer un glReadPixels vers une texture LMAP (c'est juste un nom, pas un terme technique ;-) )

    - commencer une nouvelle scene avec une couleur de fond.

    - dessiner les objets(comme les lights)

    - appliquer la texture LMAP sur la nouvelle scène avec un blend GL_ZERO, GL_SRC_COLOR

    - c'est tout !


    Et les résultats sont tout simplement magnifiques ! époustouflantes !

    Bon, trève de vanité.

    C'est vrai que ca peut avoir l'air leger et non réaliste, vu que l'intensité ne depend pas de al géomètrie, mais c'est un moteur 2D ! une simple texture en niveaux de gris multiplié par une couleur dynamique donne des résultats très probantes ! Dommage que je ne peux pas vous montrer des screenshots ! (Si quelqu'un peut m'aider ...) !
    De plus, c'est trés performant, avec une scène de 12000 faces et plus de 100 lumières (oui, c'est bien un cent), je suis dans les 180fps, et c'est du vrai éclairage dynamique !

    des suggestions ? des remarques ?

  11. #91
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Modjo
    Et les résultats sont tout simplement magnifiques ! époustouflantes !

    Bon, trève de vanité.

    C'est vrai que ca peut avoir l'air leger et non réaliste, vu que l'intensité ne depend pas de al géomètrie, mais c'est un moteur 2D ! une simple texture en niveaux de gris multiplié par une couleur dynamique donne des résultats très probantes ! Dommage que je ne peux pas vous montrer des screenshots ! (Si quelqu'un peut m'aider ...) !
    De plus, c'est trés performant, avec une scène de 12000 faces et plus de 100 lumières (oui, c'est bien un cent), je suis dans les 180fps, et c'est du vrai éclairage dynamique !

    des suggestions ? des remarques ?
    Quelques screenshots seraient bien, je vois que tu dis que tu ne peux pas, comment cela se fait? N'as-tu pas un endroit sur le net pour les créer? Il y forcément quelque part où tu peux les mettre, même un hébergeur gratuit...

    Jc

  12. #92
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Oups ! quel lapsus, je corrige :
    JE NE PEUX PAS, c'est pas je ne VEUX pas !

    Désolé!

  13. #93
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Modjo
    Oups ! quel lapsus, je corrige :
    JE NE PEUX PAS, c'est pas je ne VEUX pas !

    Désolé!
    Moi j'ai lu peux, mais alors pour quelle raison? Parce que tu n'as nul part où les mettre?

  14. #94
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Exactement.

  15. #95
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Modjo
    Exactement.
    http://weblogs.about.com/gi/dynamic/...ageshack.us%2F

    Mets ta photo, click host it! et ils te donneront un lien... Je ne sais pas combien de temps cela restera là mais ce sera déjà ça...

    Jc

  16. #96
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Merci. Je vais essayer la prochaine fois. Et si ça marche ... ce serait vraiment cool !

    PS : Je me connecte pas depuis mon PC, en fait il s'agit d'un PC à ma fac, donc, ca peut prendre du temps ...

  17. #97
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    http://weblogs.about.com/gi/dynamic/offsite.htm?zi=1/XJ&sdn=weblogs&zu=http%3A%2F%2Fwww.imageshack.us%2F
    Le même en plus direct : http://imageshack.us/

    Et sinon, tu n'as pas une petite démo ?

  18. #98
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Enfin,un premier shot :


    [/url]

  19. #99
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bon,c'est pas très clair,mais ça presente quelque uns des capabilités de toodee : la console au dessus est un plugin.

    En bas à droite, un écran radar qui est possible grace au rendu vers une texture.

    Enfin, Il y'a l'eclairage dynamique et les animations des objets, mais il faut une démo pour les voir !

  20. #100
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Ahhh, maintenant on voit de quoi tu parles =>

    Faudrait peut-être rendre le jeu plus clair comme tu le dis mais cela fait aussi un look nocturne...

    Pas mal pas mal!

    Jc

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

Discussions similaires

  1. Les meilleurs livres pour PHP ?
    Par Community Management dans le forum Livres
    Réponses: 187
    Dernier message: 24/05/2015, 03h30
  2. Meilleure architecture pour application3D/kinect
    Par xps1616 dans le forum Architecture
    Réponses: 4
    Dernier message: 25/09/2012, 11h22
  3. Les meilleurs livres pour l'Assembleur
    Par gtr dans le forum Livres
    Réponses: 52
    Dernier message: 25/09/2010, 10h25
  4. Réponses: 7
    Dernier message: 03/04/2007, 20h57
  5. [Architecture][Strategie]Meilleur technique pour le distribué
    Par dinver dans le forum Général Java
    Réponses: 9
    Dernier message: 08/12/2004, 15h58

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