Author Topic: Vitesse...  (Read 6885 times)

0 Members and 1 Guest are viewing this topic.

dualite2

  • Associate
  • Posts: 5
Vitesse...
« on: December 10, 2010, 05:47:22 PM »
Bonjour,
J'utilise GeeXLab comme plateforme de test d'algorithme graphique.
Actuellement mon premier test concerne un système de heighmap assez simpliste.
J'ai assez luté avec la doc notamment parce que je cherchais a utiliser les primitives standard de Opengl.
Au final j'ai consulté la doc de Demoniak3D qui ma permis de trouver les différentes "méthodes" de primitives.

Actuellement mon code charge environ 15.000 triangles texturer en définissant manuellement les U/V, Color et position etc..
Pour texturer l'ensemble j'ai créer un material auquel j'ai ajouter ma texture (2000x2000 jpg).
L'ensemble de ces traitements sont fait avec un script d'initialisation.

Apparemment ca s'avère relativement lent au rendu (15fps environ [core i7 GTX460M]) la question est donc que me suggérez vous pour gagner en performance ?

J'ai pensé au pistes suivantes (mais je manque d'informations pour les mettre en pratique):
-limiter le texturage à la face visible des triangles
-créer dynamiquement un objet regroupant toute les données (géométrique, UV...)
-utiliser un texture "active" au lieu d'ajouter le materiau a chaque triangles

Edit: Je n'avais pas vu la méthode HYP_Renderer.DrawTriangle qui semble être la remplaçante de la version primitive je vais tester pour comparer.

Edit2: Je n'arrive pas a faire marcher cette méthode avec une texture si quelqu'un pouvais me rediriger vers un document ou m'expliquer les étapes pour utiliser cette méthode je lui en serais reconnaissant.

Edit3: Je n'arrive même pas a faire marcher l'exemple HYP_Renderer.DrawTriangle si quelqu'un a une piste ou un début de code utilisant correctement la méthode je suis preneur (encore mieux si il arrive a texturer la bête).

Edit4: Impossible de faire fonctionner le code sample "Post_Direct_Rendering_Python" aussi j'ai passer tout les code en LUA ca fonctionne sauf que... ca n'affiche pas le triangle es ce un bug de cette release de GeeXLab?
Quelqu'un pourrait t'il tester ce code sample et me dire si il marche ou non pour lui et si le triangle est affiché? 

Merci d'avance.
« Last Edit: December 13, 2010, 02:46:30 AM by dualite2 »

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2385
    • oZone3D.Net
Re: Vitesse...
« Reply #1 on: December 13, 2010, 03:14:13 AM »
A première vue je pense que ton probleme de lenteur vient de tes 15000 triangles. On dirait que tu crée 15000 triangles en tant qu'objets séparés et c'est la gestion de ces 15000 triangles qui est lente. Si tu veux t'amuser avec les terrains, utilise plutot un mesh plane assez dense:

Code: [Select]
<mesh name="terrain" polygon_mode="SOLID" lighting="TRUE" shape_type="PLANE" back_face_culling="FALSE" >
    <position x="0.0" y="0.0" z="0.0" />
    <orientation pitch="0.0"  />
    <plane x_size="100.0" y_size="100.0" num_segs_x="50" num_segs_z="50" />
    <attach_material name="matPlane" />
    <texture_coords texture_unit="0" u_tile="1.0" v_tile="1.0" />
</mesh>

Tu peux aussi créer le mesh plane à partir du Lua ou du Python.


dualite2

  • Associate
  • Posts: 5
Re: Vitesse...
« Reply #2 on: December 13, 2010, 03:30:28 AM »
Merci, je vais m'intéresser au mesh plan pour voir ce que ca donne.

Et concernant le code sample "Post_Direct_Rendering_Python" ca marche sur ta machine ?
Je vais tester sur un autre ordinateur pour vérifier si c'est lié a ma configuration.

Celà dit je vais probablement avoir besoin de gérer un grand nombre d'objet bas niveau pour mes prochains tests soit polygones rectangulaire soit triangle le tout uniquement en scripting... dois je déduire de ta réponse précédente que je ferrais mieux de les assembler sous forme de mesh pour de plus grande performance ?

Edit: suite au test sur une autre machine (W7, Nvidia ion, Core 2 Duo) le triangle n'apparait pas!
A noter cependant que le reste des fonctionnalités scripter semble ok (comme sur la première configuration) (les 2 lignes, le dégradé sur l'image de background de la scène et l'affichage du temps écoulé).
« Last Edit: December 13, 2010, 04:07:46 AM by dualite2 »

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2385
    • oZone3D.Net
Re: Vitesse...
« Reply #3 on: December 13, 2010, 11:29:20 AM »
Oui je viens de tester avec le dernier GeeXLab 0.2.8 et la demo Post Direct Rendering Python fonctionne bien.
Tu dois utiliser la version Python de GeeXLab pour avoir le support Python. De plus GeeXLab est dispo avec 3 versions de Python:
Python 2.6, Python 2.7 et Python 3.2. Par default c'est la DLL pour Python 2.6 qui est utilisé par GXL: GeeXLabCore.dll
Tu as les deux autres DLL GeeXLabCore_Py27.dll et GeeXLabCore_Py32.dll. Il te suffit de renommer la bonne DLL en GeeXLabCore.dll fonction de ta version de Python.

dualite2

  • Associate
  • Posts: 5
Re: Vitesse...
« Reply #4 on: December 13, 2010, 01:34:57 PM »
Effectivement après le passage en 2.7 ca fonctionne et le triangle est correctement affiché.

Celà dit il y a un truc qui me chiffonne j'arrive absolument pas en Lua a faire marcher la méthode DrawTriangle, Or la doc indique que la méthode est disponible en Lua et Python.

Arrive tu a afficher un triangle avec la méthode "HYP_Renderer.DrawTriangle" en Lua?

Autre point j'envisage de faire un topic qui pour un même rendu compare les performances selon l'utilisation de primitive, mesh et peut être objet pense tu que cela puisse être utile?

P.S: j'ai concience d'être un peu casse couille mais j'aimerais comprendre le pourquoi du comment pour plus me faire coincer.
D'autre part je préfère le Lua au Python.

JeGX

  • Global Moderator
  • Capo Crimine
  • *****
  • Posts: 2385
    • oZone3D.Net
Re: Vitesse...
« Reply #5 on: December 15, 2010, 06:03:39 PM »
Effectivement après le passage en 2.7 ca fonctionne et le triangle est correctement affiché.

Celà dit il y a un truc qui me chiffonne j'arrive absolument pas en Lua a faire marcher la méthode DrawTriangle, Or la doc indique que la méthode est disponible en Lua et Python.

Arrive tu a afficher un triangle avec la méthode "HYP_Renderer.DrawTriangle" en Lua?


La fonction HYP_Renderer.DrawTriangle() a l'air de bien fonctionner. J'just ajouté ce bout de code dans la demo
DrawLine / Draw_Line_ImmediateMode_Demo.xml, just après HYP_Renderer.SetLineThickness(1.0) vers la ligne 75:

Code: [Select]
    HYP_Renderer.DrawTriangle(-10.0, -10.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0,
                              10.0, -10.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0,
                              0.0, 10.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0)

Autre point j'envisage de faire un topic qui pour un même rendu compare les performances selon l'utilisation de primitive, mesh et peut être objet pense tu que cela puisse être utile?

Oui ca peut etre utile pour d'autres personnes qui decouvre GeeXLab. Et aussi pour toi. Ca permet aussi de faire du test sur GXL car il n'y a jamais trop de scene de test.

Et désolé du retard dans la reponse, je suis assez chargé en ce moment.


dualite2

  • Associate
  • Posts: 5
Re: Vitesse...
« Reply #6 on: December 17, 2010, 01:21:09 AM »
Merci pour ces commentaires je viens enfin de comprendre qu'il y avait 2 modes de rendu différents:
-le mode "automatique" qui consiste en l'affichage a chaque frame des objets existant
-le mode "immédiat" sensiblement identique a la façon de passer des commande a la sauce Opengl

Mes essais de la commande HYP_Renderer.DrawTriangle dans le premier "auto" n'étant évidement pas pertinents.
Je trouve que cette notions manque dans la documentation GeeXLab (genre: mode de la méthode: auto/immédiat) ce serait aussi pas mal de rajouter une référence vers un sample utilisant la fonction.

En ce qui me concerne je crois que cette fois j'ai saisie mais je pense que ce serait positif d'ajouter ces éléments.

En tout cas merci pour tout!
« Last Edit: December 17, 2010, 03:52:16 AM by dualite2 »