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 :

Pourquoi les objets courbés n'existent pas ?


Sujet :

Moteurs 3D

  1. #1
    Membre du Club Avatar de bricechris
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 47
    Points : 57
    Points
    57
    Par défaut Pourquoi les objets courbés n'existent pas ?
    Bonjour,

    Pourquoi les objets réellement courbés n'existent pas ? Je n'en est jamais vu le moindre dans n'importe quel jeu vidéo - et pourtant j'en ai testés beaucoup !

    Je m'explique : prenez un barreau dans une prison modélisée dans un JV : en fait, il n'est pas courbé, mais composé d'une multitude de polygones, ce qui quand on zoom dessus, fait cet effet de "marche".

    Bref, les polygones courbés, pourquoi y en a pas ?

    Cordialement,

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 927
    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 927
    Points : 220 599
    Points
    220 599
    Billets dans le blog
    128
    Par défaut
    Bonjour,

    Il y aura toujours des effets d'escalier, plus ou moins visibles selon le niveau de détails de la mesh.
    Pourquoi, simplement car l'ordinateur utilise des points. Et que c'est la multitude points qui forme la courbe. Si cette multitude de points est trop détaillé pour un objet que l'on verra que trop peu, cela ne sert pas à grand chose de perdre des performances dessus.
    Car, plus un objet est détaillé (ou complexe) plus il prend de la mémoire, plus on prend du temps à le dessiner.

    Bon, rassurez vous, on arrive tout de même à voir de belles courbes.

  3. #3
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Car les seuls figures géométriques que sait dessiner une carte graphique sont les points, les lignes et les triangles. Du coup, on ne peut faire que des approximations de courbes. Le seul vrai moyen pour dessiner une courbe visuellement parfaite et de faire en sorte que l'approximation ne soit pas visible, ce qui est parfaitement faisable si l'on prend en compte la taille des pixels finaux. Par exemple si on veut tracer une courbe en 2D et que l'on sait qu'elle va s'étaler sur 100 pixels alors on n'utilisera pas le même nombre de primitives que si elle s'étalait sur 10 pixels. Dans le cas des 100 pixels on tracera 100-1 lignes et dans le cas des 10 pixels 10-1 lignes. Avec un système qui gérerait des "vrais courbes" on ne pourrait obtenir de meilleurs résultats visuels vu que l'affichage en pixels est déjà l'approximation d'un rendu. Le problème c'est qu'estimer de combien de points une courbe doit être formées pour être visuellement parfaite et l'adapter en temps réel peut être très coûteux et ne vaut pas souvent le coup.

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Pourquoi les objets réellement courbés n'existent pas ?
    Il y aura toujours des effets d'escalier, plus ou moins visibles selon le niveau de détails de la mesh.
    Car les seuls figures géométriques que sait dessiner une carte graphique sont les points, les lignes et les triangles.
    Bon, je vais encore aller à contre sens

    Les objets "courbés" peuvent exister. Je pense par exemple au Phong tessellation (GPU Pro II-1) ou aux fonctions NURBS (GPU Pro II-3). Il est tout à fait possible de représenter par exemple une sphère avec son équation et réaliser un rendu sans "escalier" quelque soit le zoom.

    Pourquoi découper une forme en polygone plutôt que de travailler avec les équations ?
    Simplement pour des raisons de performances.

    Les calculs réalisés en utilisant des lignes (ou des triangles, c'est la même chose) sont relativement simples et performants. Lorsque l'on souhaite afficher une ligne (ou une courbe) entre 2 points, le moteur de rasterisation doit calculer les points intermédiaires.

    Dans le cas d'une ligne, on dispose en particulier de l'algorithme incrémental de Bresenham qui permet de calculer les points d'une ligne en minimisant les opérations de multiplications et divisions. Comme on peut toujours représenter une forme par un ensemble de triangles et que l'on a rarement besoin d'une représentation "exacte" d'une forme, les cartes graphiques utilisent historiquement que la représentation par triangle dans le moteur de rasterisation (ce n'est plus le cas avec les dernières versions d'OpenGL 4 et DirectX 11 qui permettent de programmer les moteurs de rasterisation).

    En revanche, lorsque l'on souhaite dessiner une courbe, il faut calculer chaque point avec des calculs complexes utilisant des multiplications/divisions/fonctions trigonométriques, etc. qui baissent énormément les performances. Pour les jeux par exemple, où l'on recherche avant tout la performance, ces approches ne sont applicables qu'avec des cartes graphiques récentes et puissantes.

    Mais il est tout à fait possible de générer le maillage dynamiquement en fonction du zoom (et donc du nombre de points à afficher), mais toujours avec un coût énorme en terme de performance.

    Car, plus un objet est détaillé (ou complexe) plus il prend de la mémoire, plus on prend du temps à le dessiner.
    Du coup, non. Il peut décrire un objet avec des équations (et donc peu de paramètres) et avoir pour autant un objet plus complexe. Par contre, cela à un coup en terme de performances.
    On peut citer aussi la génération de formes par fractales (des arbres par exemple).

  5. #5
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Tu ne vas pas vraiment à contre sens, en gros tu dis qu'on peut stocker une courbe "parfaite" (encore heureux ) mais que pour l'afficher il faut s'adapter au rasterizer, c'est exactement l'idée que j'énonçais

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 585
    Points : 1 562
    Points
    1 562
    Par défaut
    Je pense que c'est plus une question de polyvalence qu'une question de perf.

    Les premier moteurs graphiques utilisaient plutôt des surfaces analytiques (essentiellement des quadriques), car le calcul de normal (donc d'éclairage), ainsi que le calcul d'intersection est beaucoup plus rapide avec une surface analytique qu'avec des triangles, sans parler de la consommation mémoire.

    Les motos du premier TRON sont composé uniquement de quadriques, et je me souvient d'un vieux jeu d'aventure (Ecstatica) basé sur un moteur ellipsoïdale où les persos étaient fait uniquement d'ellipses (ce qui nous donnait des heros fortement membré ).

    Lorsque la mémoire a commencé à devenir accessible, les triangles se sont développé car ils permettaient de créer des formes plus général plus facilement. Et c'est à ce moment qu'on a commencé à accélérer au maximum le tracé de triangles et à créer des cartes graphiques digne de ce nom

  7. #7
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    Tu ne vas pas vraiment à contre sens, en gros tu dis qu'on peut stocker une courbe "parfaite" (encore heureux ) mais que pour l'afficher il faut s'adapter au rasterizer, c'est exactement l'idée que j'énonçais
    Désolé, je n'avais pas bien compris alors.

    Bon, l'idée est dans tous les cas que c'est possible d'afficher des courbes mais que c'est très coûteux (remarque : on le trouve peut être pas encore dans les jeux, ou que dans les jeux récents avec grosses cartes graphiques, mais il est probable que cela soit déjà utilisé dans certaines applications industrielles, qui ont plus besoins d'avoir des résultats "bons" que rapides)

  8. #8
    Membre du Club Avatar de bricechris
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 47
    Points : 57
    Points
    57
    Par défaut
    Oui, je vois.

    Donc, selon vous, il serait plus coûteux de modéliser un tronc d'arbre avec une courbe parfaite utilisant le bon algorithme pour ça, plutôt que disons 15-20 polygones mis bout à bout (style cristal taillé en prisme) ?

  9. #9
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 927
    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 927
    Points : 220 599
    Points
    220 599
    Billets dans le blog
    128
    Par défaut
    Oui,

    Je pense qu'il est toujours plus couteux d'essayer de dessiner plus de détails.
    Après, il faut savoir qu'il y a un compromis à faire, entre le niveau de détails d'un objet simple et les performances.
    Si vous avez une scène avec 30000 arbres, vous allez préférer avoir un mesh tout simple qu'une formule permettant de générer un arbre tout beau.
    Mais si vous avec une scène avec 1 seul arbres, alors mettez le paquet sur la beauté de l'arbre. Utilisez les formules qui vous amusent pour que le niveau de détail soit le plus proche de la réalité (bien que vous aurez toujours les limitations de la machine).

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 585
    Points : 1 562
    Points
    1 562
    Par défaut
    Cela dépend de la technique utilisé. Du ray-tracing est beaucoup plus rapide avec des primitives analytiques (c'est d'ailleurs pour ça que la plupart des démo technique en ray-tracing affichent des sphères).

    Les cartes graphique par contre sont conçus pour rasteriser du triangles. Il est en effet plus facile de modéliser des formes compliqués avec plus ou moins de triangles qu'avec des surfaces analytiques. Donc on a créé des GPU extrêmement performant qui ne savent faire que des triangles.

    Le "tout triangle" est apparu au cours des années 90, lorsque les cartes graphiques se sont développées et qu'on a su faire du triangles très rapidement. Mais avant, on avait droit à toutes sortes de techniques de rendu:
    • 3D ellipsoïdal (cf mon poste précédent)
    • 3D Voxel (commanche 3, outcast)
    • 3D "file de fer" composé uniquement de ligne ou splines (surtout en CAO, IBMCAD)
    • 3D précalculé (megarace 2, FFVII, area51, mais ça compte pas trop car la 3D initial peut être en triangle, ray-tracing ou peinture aquarel ^^)
    • 3D isométrique encore très présente, même si ce n'es pas de la 3D à proprement parlé (sim city, sonic 3D, Diablo)


    Tout ça pour dire que si le rendu triangle est plus rapide, c'est parce qu'on a des processeurs spécialisés dans ce type de rendu. Mais certaines choses ne peuvent pas se faire sur carte graphique (reflexion/refraction, ray-tracing en général, ou pour des scènes extrèmements compliqués qui nécessiteraient plusieurs miliard de polygone, il est parfois nécessaire de l'optimiser en utilisant des surfaces analytiques et effectuer un rendu sur CPU)

  11. #11
    screetch
    Invité(e)
    Par défaut
    Un simple pixel shader permet de faire des courbes parfaites quel que soit le zoom, c'est une technique appliquée désormais dans le rendu des polices de caractères
    cela consiste a envoyer des triangles au GPU vec une equation, le GPU pour chaque pixel évalue l'équation et calcule si le point est visible ou pas.

  12. #12
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Dessin vectoriel :o

  13. #13
    screetch
    Invité(e)
    Par défaut
    bah oui.
    Mais de là a étendre a des arbres ou des trucs pareils...

  14. #14
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    585
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 585
    Points : 1 562
    Points
    1 562
    Par défaut
    Ca doit bien être possible des faire des arbres procédural uniquement en shader

  15. #15
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Moui avec geom shad, transform feedback mais là on est plus vraiment sur du temps réel ou sinon on a un truc tout moche

  16. #16
    Nouveau membre du Club Avatar de sylvain230
    Homme Profil pro
    Orléans
    Inscrit en
    Mai 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Orléans
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 234
    Points : 30
    Points
    30
    Par défaut
    Par rapport aux objets courbés, la raison pour laquelle ils n'existent pas est simple.
    Un ordinateur est une machine qui effectue des calculs simples avec des 0 et des 1 et qui utilise ce que l'on appelle des mathématiques discrètes.
    Qui dit discret ne dit pas continue donc un nombre limité de point.
    En effet, lors de la modélisation d'un objet aussi complexe que vous le désirez, même si il a beaucoup de triangles(des milliers, des millions ...) , il aura toujours une valeur finie de triangle.
    Un ordinateur ne possède pas la notion de l'infini. Cela n'existe pas en informatique.
    Donc si on effectue un zoom sur l'objet, il finira par se pixeliser.

  17. #17
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Points : 1 412
    Points
    1 412
    Par défaut
    Citation Envoyé par sylvain230 Voir le message
    Donc si on effectue un zoom sur l'objet, il finira par se pixeliser.
    Ça dépend comment est fait représenté l'objet et comment est fait le zoom (en vectoriel, par exemple, on peut zoomer à l'infini sans pixellisation ; si tu dessines ton objet sur GPU, tu peux facilement te passer de la pixellisation aussi).

  18. #18
    Nouveau membre du Club Avatar de sylvain230
    Homme Profil pro
    Orléans
    Inscrit en
    Mai 2008
    Messages
    234
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Orléans
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 234
    Points : 30
    Points
    30
    Par défaut
    Tu peux m'expliquer un peu plus en détail comment tu fais pour avoir un objet toujours détaillé en zoomant ?
    Parce que la je ne vois pas bien.

    Ou tu peux me donner un exemple ?

  19. #19
    screetch
    Invité(e)
    Par défaut
    pour tracer, par exemple, une courbe (un extrait d'une courbe) tu traces un triangle et a ce triangle, tu associes un pixel shader.
    Ce pixel shader va calculer pour chaque pixel si il est plus grand ou plus petit qu'une certaine fonction (que tu peux ajouter comme propriété de vertex lorsque tu envoies le triangle au GPU)
    etant évalué pour chaque pixel, si tu zooms, il va juste recalculer de plus en plus de pixels. Tu peux zoomer a l'infini.
    Tu peux facilement tracer des courbes de bezier ainsi, et comme les polices de caractères sont des courbes de bézier en général, tu peux tracer du texte par exemple

    Le jeu francais R.U.S.E. utilise cette technique, sans doute pour le rendu des polices (ils utilisent Scaleform qui je crois utilise cette techno) mais aussi pour les fleches et autres objets qu'ils affichent sur la carte, et même pour la petite balle rebondissante de l'ecran de chargement
    c'est automatiquement une très bonne résolution et même antialiasé gratuitement!

  20. #20
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Il suffit de faire en sorte que le dessin suive un modèle mathématique particulier comme par exemple un vecteur d'origine (0,0) et de direction (1,1), si tu dessine un segment qui suit la définition de ce vecteur relativement à la taille de ton rasterizer et bien tu peux zoomer à l'infini à la position (0.5,0.5) tu auras toujours un trait parfait car on ne stocke pas un niveau de le détail on le génère à chaque affichage et tout ce que l'on stocke c'est un vecteur et pourtant on peut en générer un niveau de détail infini. Dessine la fonction COS sur ta calculette et zoom 50x sur la courbe tu obtiendras toujours une courbe de même largeur et toujours plus précise.
    En gros tu as deux façon de faire, voilà un autre exemple, un cercle peut se définir comme :
    - Une approximation par un ensemble de points reliés entre eux.
    - Un cercle de rayon R et de centre C.
    Après les fonctions d'affichage ne sont pas du tout les mêmes, dans le premier cas on affiche simplement les points stockés, dans le deuxième on génère des points de façon à être aussi précis que le rasterizer (plus ne servirait à rien).

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/12/2008, 18h41
  2. Afficher les liens qui n'existent pas
    Par engi dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/10/2008, 21h37
  3. sauvgarder les objets qui n'ont pas été sauvgarder
    Par ferrero dans le forum Hibernate
    Réponses: 5
    Dernier message: 23/05/2007, 17h22
  4. Pourquoi les mails ne sont ils pas envoyés?
    Par Sunsawe dans le forum Développement
    Réponses: 3
    Dernier message: 13/04/2007, 00h49
  5. Réponses: 4
    Dernier message: 19/08/2006, 23h58

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