Pages: 1 2
Hello
Je créé ce message pour informer ceux qui voudrait utiliser les vbo et qui rencontre des problemes
Dans la version 1.5 qu'on trouve sur le svn irrlicht ajoute le support des vbo (seulement pour opengl pour l'instant)
Seulement il y a une petite limitation sur le nombre de vertex min d'un mesh pour pouvoir exploiter ces vbo. Cette limite est pour l'instant codé en dur et fixé à 500 mais d'après le commentaire à coté elle devrait etre modifié à l'avenir pour devenir modifiable par l'utilisateur.
En attendant cette modif si vous voulez donc exploiter les vbo pour un mesh dont le nombre de vertex est inferieur à 500 je vous conseille de mettre en commentaire ce test qui se trouve dans le fichier CNullDriver.cpp dans la fonction isHardwareBufferRecommend() et de recompiler irrlicht.
Pour l'utilisation des vbo, il suffit de spécifier à votre meshbuffer d'utilise un type de transfert STATIC, STREAM ou DYNAMIC selon le type de vbo que vous voulez.
Une doc sur les VBO defini l'utilisation pour ces 3 modes de transfert :
STREAM : Ce mode est particulièrement efficace pour les objets animés tel un personnage.
DYNAMIC : Ce mode est recommandé pour le rendu d’objets animés affichés plusieurs fois par frame, par exemple pour le rendu multi passe.
STATIC : Ce mode est parfaitement adapté pour les objets non déformables, c’est-à-dire pour toute géométrie qui reste valable pour plusieurs frames.
Voici un exemple d'utilisation que j'ai trouvé sur le forum officiel.
scene::IAnimatedMesh* animMesh = smgr->getMesh("20kdm2.bsp");
scene::ISceneNode* node = 0;
if (animMesh) {
scene::IMesh *mesh = animMesh->getMesh(0);
for (unsigned int i=0; i<mesh->getMeshBufferCount(); i++)
{
mesh->getMeshBuffer(i)->setHardwareMappingHint(scene::EHM_STATIC);
}
node = smgr->addMeshSceneNode(mesh);
}
PS pour copland : la limitation a 500 ne permet pas d'exploiter ta classe de terrain avec les vbo, une fois commentée on fait exploser le fps meter :p
Dernière modification par Ikam (23-04-2008 12:21:23)
Hors ligne
Et tu sais d'où vient cette limitation à 500 polys min ?
Ça m'intrigue cette histoire...
Hors ligne
Je crois que les VBO fonctionne au mieux dans une certaine plage de taille de buffer, du coup avoir un buffer trop petit ou trop grand est peut être plus handicapant que d'utiliser une méthode d'affichage plus classique du genre par vertex array.
Pour ce qui est du 500, je sais pas trop d'où il sort, je pense que c'est plutôt arbitraire des développeurs de irrlicht.
De manière générale les VBO sont plus rapide que les vertex array ou les diplay list, après cela dépend aussi peut être du matériel et du constructeur (carte graphique, driver) qui peuvent etre plus ou moins efficaces selon la technique de rendu utilisé.
Du coup et en fonction de ce qu'on veut afficher il vaut mieux parfois tester plusieurs méthode pour déterminer laquelle est plus efficace.
Dans mon cas pour ce que j'ai voulu afficher (pleins de petits buffer d'environ 200 a 400 vertex), supprimer cette limite pour activer les vbo, a donné un rendu bien plus rapide que sans
Peut etre y'a t il des cas ou cela sera plus lent, si c'est la cas rien n'empêche de spécifier que l'on ne veut pas les vbo en mettant l'attribut EHM_NEVER (qui est mis par defaut je crois).
Dernière modification par Ikam (23-04-2008 17:54:29)
Hors ligne
PS pour copland : la limitation a 500 ne permet pas d'exploiter ta classe de terrain avec les vbo, une fois commentée on fait exploser le fps meter :p
J'ai pas compris là, y'a pas assez de polygones dans mes meshbuffers c'est ça :s ? C'est quand même mal foutu cette limite à 500 non ?
Hors ligne
J'ai pas compris là, y'a pas assez de polygones dans mes meshbuffers c'est ça :s ?
Oué c'est exactement ca.
C'est quand même mal foutu cette limite à 500 non ?
Je confirme c'est pour ça que je l'ai supprimer. Cette limite demande d'être révisée, mais c'est surement prevu, puisque le commentaire a coté dit : "todo : Tweak, and make user definable"
Hors ligne
Mouais, je suis toujours sceptique quand à l'intérêt de son existence même...
Hors ligne
Bein les VBO c'est bien beau (tiens je suis poête) , mais comme Aranoth je reste super septique sur leur utilité dans Irrlicht. J'aurrai préféré une grosse optimisation du rendu plustôt que des pseudos solutions qui nous font pas gagner grand chose au final. Surtout si c'est aussi performant que le Lod du système de terrain... Enfin bon on va pas se plaindre irrlicht est gratos et ils font de leur mieux .
Hors ligne
Ah nan, c'est à propos de la limite des 500 polys que je suis sceptique
Les VBO c'est indispensable, c'est leur absence qui explique la lenteur d'Irrlicht (renvoyer la géométrie à la carte graph à chaque rendu est une aberration)
Depuis le temps qu'on réclame les VBO dans Irrlicht, on va pas critiquer maintenant ^^
Hors ligne
Bein désolé mais soit leur implémentation est à chier, soit j'ai loupé un épisode car en OpenGL en utilisant les VBO j'ai pas gagné plus de 3 ou 4 fps sur de grosses scene alors il faudra qu'on m'en explique la réelle utilité tout comme le lod de leur terrain engine...
Hors ligne
Bon et vu que j'aime pas dénigrer sans être sûr de moi j'ai réeffectué un test avec la dernière SVN.
Sur mon jeu (Crash Car) qui comporte en moyenne 27 000 polygones au rendu ( c'est ce qu'on affichait en 2004 sur les jeux dx7...) je n'ai pas gagné un copec, j'aurrai même plustôt tendance à dire que j'ai perdu vu qu'avec les VBO ça affiche 1 fps de moins...Ce qui me fait donc 38 Fps avec les VBO et 39 Fps sans les VBO.
Alors si vous voulez me convaincre que leur pseudo bidouile a été efficace, je suis pas contre des petites démos de bench qui le démontre .
Hors ligne
je posterai une demo dans la soirée qui pourra tourner avec et sans les vbo pour tester sur vos machines.
Hors ligne
voila
une petite demo pour tester :
demo
voici mes stats : (7600 gs geforce sous xp)
OpenGL sans vbo => 280 fps
OpenGL avec vbo => 630 fps
DirectX9 => 220 fps
Dernière modification par Ikam (25-04-2008 20:12:13)
Hors ligne
Chez moi, sur deux machines:
une 9700pro (XP):
- 285 sans VBO
- 345 avec VBO
- 222 sous DX
avec une 8800GTX (Vista)
- 280 sans VBO
- 1871 avec VBO
- 867 sous DX
Hors ligne
Avec une Geforce 4 MX 440 Go :
- 57 sans VBO
- 118 avec VBO
- 36 sous DX
Je posterais dimanche un bench avec ma Geforce 8600 GT.
Hors ligne
Je m'incline, vous avez conspirez contre moi je suis sûr .
Na sérieusement, avec le "bench" j'ai 350 avec VBO et 285 sans VBO sur le portable.
Peux-tu faire le même essai mais avec un objet d'~5000 polygones en plus qui projette une ombre sur le terrain s'il te plait ?
J'ai un doute sur une des fonctionnalités d'irrlicht qui bloquerai éventuellement le bon fonctionnement des VBO car dans mon jeu le gain et tout simplement de 0% et j'aimerai bien comprendre pourquoi...Shadow, objet trop polygonal ou je sais pas, je vais de mon côté procéder aussi à quelques tests car ceci m'a redonné un brin d'espoir .
Voilou voilou en tout cas merci pour la démo vous avez raison .
[ EDIT ]
Oubli le test avec un objet de 5000 polys et les shadows, je viens de désactiver les shadows sur les objets et ça marche toujours pas.
J'ai désactiver mon glow également, j'ai 214 fps sans vbo et 214 fps avec vbo, je cherche toujours d'ou peut venir le fait que ça ne fonctionne pas sur mon jeu...
Hors ligne
quelques pistes a verifier :
il faut savoir que si ta ton propre scenenode la methode de rendu doit s'effectuer via drawMeshBuffer(), drawIndexedTriangleList n'utilise pas les vbo.
si ton mesh utilise octreescenenode je crain que celui ci soit moins efficace que le rendu direct par vbo, vaut mieux mettre addAnimatedMeshSceneNode
si ta scene est decoupé en plusieurs mini buffer de -500 vertex, c'est le probleme que j'ai decris avant, essaye avec la dll de ma demo, c'est la derniere version svn, avec la modif pour supprimer cette limite.
sinon essaye en mode debug (avec la dll irrlicht compile en debug) et trace le code dans irrlicht pour voir si ca utilise les vbo
Hors ligne
Ah ! t'a peut-être mis le doigt sur mon problème le drawMeshBuffer !
Je vais de ce pas véifier, merci pour ses informations capitale.
Sinon pour la dll y'a pas de soucis je l'ai modifié moi même .
Merci .
Hors ligne
De toute façon Copland, les VBO ce n'est pas de la bidouille, c'est totalement différent des techniques d'optimisation comme le LOD.
Le principe du VBO c'est de stocker ta géométrie dans la VRAM de ta carte graphique, comme tu y stockes déjà tes textures. De ce fait tu n'as pas à renvoyer ta géométrie à chaque fois (comme ça se fait avec les vertex Arrays ou les appels direct à glVertex). Donc ça se rapproche des Display list (qui compilent et stockent une liste d'instruction dans la VRAM).
Donc quand tu as une scène avec peu de polygones, ça ne se voit pas trop. Quand tu as une scène chargée, là ça fait toute la différence.
Tu as pris l'exemple des 27 000 polygones/scène. Sans VBO tu envois ces 27 000 polygones à la CG à chaque frame ! Soit 60x par seconde...
Avec les VBO tu les stockes dans la CG, donc tu ne les envois qu'une seule fois. Le bus n'est plus saturé.
Le gain de temps peut par contre est perdu si ta carte graphique dispose d'une faible VRAM et qu'elle ne peut pas stocker toute ta géométrie. Je ne sais pas comment se comporte la CG dans ces cas là (peut être un truc similaire au swap ?) mais y'a de fortes chances que ça te pénalises plus qu'autre chose.
Mais le problème ne se pose plus avec les nouvelles CG qui montent jusqu'à 512 Mo de VRAM.
De toute façon les anciennes cartes ne supportent pas les VBO (c'est une extension OpenGL) donc le problème ne devrait pas apparaitre.
Voilà, tout ça pour dire que les VBO c'est bon, mangez-en
Hors ligne
Hum visiblement il y a bien un problème dû à l'intégration des VBO sur irrlicht car quelque chose dans mon jeu semble empêcher leur bon fonctionnement, donc soit c'est un bug de mon code (j'en doute fortement, non pas que j'ai la science infuse, mais je ne vois pas grand chose en relation qui pourrait poser soucis) soit c'est un bug d'implémentation. Je vais maintenant me pencher sur l'utilisation du shader pour le moteur de terrain on sait jamais... j'avou que sur ce coup là je vois pas trop ce qui pourrait poser problèmes.
Je vous tiendrai informé si je trouve la solution, car à mon avis il n'est pas exclus que d'autre rencontre le souci sur des projets de même envergure.
PS Aranoth :
Pour les VBO, je connais en théorie leur utilité qui n'est plus à démontrer, ce que je dis en revanche, c'est que sur Irrlicht et en particulier dans mon cas, ça ne semble pas fonctionner donc peut-être qu'une faute à été comise sur leur implémentation en interne. Ce n'est pas dénigrer ni faire la mauvaise langue, c'est simplement une supposition, je peux très bien moi même avoir fait des bétises dans mon code, c'est pourquoi je cherche dans mon code avant de leur jetter systématiquement la faute.
Après je trouve que certaines de leur implémentations sont à la limite de la bidouille c'est pourquoi je le cite de cette façon.
Ne vous froissez pas les amis, j'aime quand même irrlicht et suis très reconnaissant à ses développeurs, sinon je ne serais pas ici à l'heure actuelle .
Hors ligne
Essaye de mettre des breakpoints sur tes fonctions render et de tracer afin de remonter le code jusque dans irrlicht pour voir si il utilise bien les bonne methodes. Sinon essaye aussi directement des breakpoint sur les fonctions drawMeshBuffer() par exemple du fichier CNullDriver.cpp.
Si tu veux un coup de main hesite pas, je peux essayer de voir avec toi ce qui va pas.
Moi aussi je rencontre un nouveau probleme avec les vbo, je sais pas si vous avez remarqué mais dans la demo que j'ai envoyé l'appli crash apres quelques secondes (en mode opengl vbo) (moins de 2 minutes generalement) meme sans toucher a la camera.
J'ai commencé a chercher la cause et ca viendrai apparrement de la fonction updateAllHardwareBuffers() de la classe CNullDriver avec un probleme de pointeur null sur core::map, j'ai pas encore identifier exactement la cause mais je vous tient au courant :p
Hors ligne
Après je trouve que certaines de leur implémentations sont à la limite de la bidouille c'est pourquoi je le cite de cette façon.
Ah ok, au temps pour moi. Je pensais que tu parlais des VBO en eux-même, alors qu'en fait c'est plutôt l'implémentation que tu sembles qualifier de "bidouille".
Pour ça je ne peux rien dire, depuis que j'ai mon moteur 3D je n'utilise plus Irrlicht ^^
Hors ligne
Ton moteur 3D on peut le tester ?
C'est à base de Irrlicht ou entièrement écrit par ta pogne ?
Hors ligne
Nan on peut pas le tester, il est d'ailleurs bien loin d'être finit : je manque cruellement de temps et j'ai d'autre projets plus importants.
D'ailleurs les VBO sont l'exemple typique de ce qui traine sur ma "to-do list" depuis Noël...
Et c'est totalement différent d'Irrlicht, il n'y a pas de SceneManager, c'est vraiment orienté jeu. C'est aussi du full OpenGL
Hors ligne
Moi aussi je rencontre un nouveau probleme avec les vbo, je sais pas si vous avez remarqué mais dans la demo que j'ai envoyé l'appli crash apres quelques secondes (en mode opengl vbo) (moins de 2 minutes generalement) meme sans toucher a la camera.
Yes je confirme, même problème dans mon jeu vidéo
Hors ligne
slt j'ai testé la demon avec les vbo j'ai 15fois plus de fps de 230 a 3300 donc c super bien mé voila lorsque je veut reproduire sa chez moi sa marche pa je gagne 10fps et encore defois j'en perd donc j'aimeré voir comment ta fé ps pourais tu poster le code source sa seré sympa
merci et bonne continuation a tous
Hors ligne
Pages: 1 2
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 20 invités en ligne Aucun membre connecté RSS Feed |