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èneLors 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érielJe 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.htmlLes 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 triangulaireLe 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
23fpsCependant 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 sommetLe 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
31fpsCette 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 planLe 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.