Author Topic: Différentes méthodes et leur performances  (Read 4291 times)

0 Members and 1 Guest are viewing this topic.

dualite2

  • Associate
  • Posts: 5
Différentes méthodes et leur performances
« on: December 17, 2010, 05:30:47 AM »
Bonjour,
L'objectif de ce sujet est de parler des performances de GeeXLab lors de l'utilisation de plusieurs méthodes pour générer un rendu.

La scène
Lors de mes tests je travaille sur un algorithme qui affiche une carte de hauteur (heighmap) a l'écran.
La carte de référence fait 15.000 triangles, elle est intégralement texturé.
Cependant la texture n'ayant jamais été responsable d'une limitation en terme de performance je n'en parlerais pas par la suite.
Celà signifie que les éléments suivants sont nécessaire pour chaque triangle :
  • Coordonnées Spatiales X, Y, Z
  • Coordonnées de Texture U, V
  • Couleur Rouge, Vert, Bleu, Alpha
  • Dans certain cas les normales (pour l'instant a 0,0,0) puisque je n'utilise pas de lumière

Le matériel
Je travaille sur un ordinateur portable doté d'un i7-740QM   1,73Ghz et d'une Geforce GTX460M.
Compter un score supérieur a 12.000 sous 3D mark 2006 équivalent voir supérieur a une 8800GT.
Pour plus d'info : http://www.notebookcheck.biz/NVIDIA-GeForce-GTX-460M.38917.0.html

Les techniques de rendu tester:
  • Un rendu basé sur les fonctions de génération de primitives triangulaire utilisant un material commun pour le texturage
  • Un rendu basé sur le dessin de triangle en "ImmediateMode"
  • Un rendu basé sur le dessin de triangle en "ImmediateMode" via un tableau de sommet
  • [A VENIR]Un rendu basé sur un mesh plan
  • [A VENIR]Un rendu basé sur un Vertex pool



1-Le rendu basé sur les fonctions de génération de primitive triangulaire
Le rendu fonctionne via 2 étapes :
  • Initialisation du tableau contenant les hauteur des cases de terrain
  • Lecture du tableau et génération des triangles
Le rendu utilise les fonctions suivantes :
  • HYP_Primitive.CreateTriangle
  • HYP_Primitive.SetTriangleVertexPosition
  • HYP_Primitive.SetTriangleVertexColor
  • HYP_Primitive.SetTriangleVertexTexCoords

Le framerate résultant de ce rendu est 15fps (a noter que le fait qu'il s'agisse d'objet rend le framerate indépendant du temps d'exécution du script lua qui les as créer).


2-Le rendu basé sur le dessin de triangle en "ImmediateMode"
Le rendu fonctionne via 2 étapes :
  • Initialisation du tableau contenant les hauteur des cases de terrain
  • Lecture du tableau et génération des triangles (cette étape étant exécuté en POST_DIRECT_RENDERING donc a chaque frame)
Le rendu utilise uniquement la fonctions : HYP_Renderer.DrawTriangle

Le framerate résultant de ce rendu est 23fps
Cependant cette fois le temps d'exécution du script en LUA a un impact sur les performances.
Simplement parce que cette fois l'étape de génération des triangles incluant différents calculs redondant est effectué pour chacune des frames.
Néanmoins vous noterez que l'on a un gain d'environ 50% de performances avec cette méthode.


3-Le rendu basé sur le dessin de triangle en "ImmediateMode" via un tableau de sommet
Le rendu fonctionne via 2 étapes :
  • Initialisation du tableau contenant les hauteur des cases de terrain et génération des données des triangles
  • Création des triangles a partir du tableau des données(cette étape étant exécuté en POST_DIRECT_RENDERING donc a chaque frame)
Le rendu utilise uniquement la fonctions : HYP_Renderer.DrawTriangle

Le framerate résultant de ce rendu est 31fps
Cette fois l'impact du script LUA sur les performances est très réduit puisqu'il se limite a une boucle qui appel la fonction de création des triangles.
Le gain du pré-calcul des données est tout de même proche des 35% par rapport a la méthode précédente.


4-Le rendu basé sur un mesh plan
Le rendu fonctionne via 2 étapes :
  • Initialisation du tableau contenant les hauteurs des cases de terrain et génération des données points
  • modification des positions, couleurs et UV de chacuns des points du mesh_plan
Le rendu utilise les fonctions suivantes :
  • HYP_Mesh.CreatePlane
  • HYP_Mesh.SetVertexPosition
  • HYP_Mesh.SetVerticesColor
  • HYP_Mesh.SetVertexUVCoords

Le framerate résultant de ce rendu est 1248fps sans texturage et 590fps avec.
On nage clairement dans une autre catégorie (19 fois plus rapide au pire...)


La suite très bientôt!


En espérant que ce sujet soit a même de vous guider dans les choix d'implémentation de vos scènes.
« Last Edit: December 21, 2010, 12:03:41 AM by dualite2 »