Pages: 1
Bonjour.
J'ai réaliser un petit jeu avec irrlicht cependant je me heurte a un problème de performance très important. dès que je monte en poly ( exemple : une scene de 16 poly je suis a 3000 FPS tandis que si je prend une scene avec un seul .obj de 16000 poly je suis a un moyenne de 170 FPS ) j'ai une tres tres bonne config . je ne comprend vraiment pas d'ou cela peu provenir.
y a t'il une fonction a activer pour optimiser l'affichage d'un model ??
j'ai essayer de changer le format ( format original .X et format tester .obj ( je gagne un poil mais trop peu ) ).
merci d'avance de votre aide.
Hors ligne
Bah, ca me paraît énorme 16000 poly aussi. Pour du temps réel, le principe c'est de faire du low poly, et de tricher en texturant ton modèle parfaitement pour obtenir un bon rendu.
Hors ligne
Ah je me souvient d'un mesh que j'avais créer qu'y avez plus de 2,3M de poly, irrlicht na même pas était capable de le lire, et se qui me fais peur sur irrlicht : devoir tous recommencer par manque de performance...
16000 poly c'est énorme, alors j'ai un gros problème de modélisation...
Sinon vous n'avez pas une idée pour augmenter les performances, car j'en est aussi besoin.
Un pierre deux coup, comme un dit plus.
Hors ligne
Salut Motohime.
16000 polygones, à l'heure actuel, en fait c'est pas grand chose. Même si par habitude on essais de travailler
le plus possible en lowpoly.
Cela dépend évidement du hardware, mais on peu attaquer sans soucis des scènes à 6 chiffres.
Ton soucis vient je pense du fait que tu emplois la version 1.7.x d'Irrlicht, ce qui implique fort
probablement que tes géométries soient par défaut en mémoire système. Cela pénalise énormément
la vitesse de rendu. Il faut 'forcer' Irrlicht à passer par les VBO, en passant par exemple
par une fonction comme 'setHardwareMappingHint'. Et la tu devrait largement voir la différence.
(parfois de l'ordre de 1 à 10). Ce n'est pas le remède miracle, mais c'est souvent un bon début.
Hors ligne
merci beaucoup je vais tester cela . je vous dit de quoi il retourne mais effectivement j'utilise une version irrlicht 1.7.x.
Hors ligne
Comment utiliser cette methode pour les IAnimatedSceneNode plz ?
Hors ligne
je suis pas un pro pour ce qui est des animation, ceci dit attention, l'instruction s'applique aux mesh, pas aux nodes (donc pas aux IAnimatedSceneNode )
Hors ligne
Alors après une soirée complète de test voici les résultat: ( même mesh a chaque fois )
-une scene avec 10 objets en .x de 3000 poly = 50 fps
-une scene avec 10 objets en .obj de 3000 poly = 50 fps
-une scene avec 10 objets en .mesh de 3000 poly = 2400 fps
Second test :
-un objet en .mesh de 16000 poly sans triangle selector = 2400 FPS
-un objet en .mesh de 16000 poly avec triangle selector = 240 FPS.
Bon pour l'histoire du format déjà je n'ai pas vraiment compris mais passont, mais alors le coup des triangles selector sur un model qui font baisser les perfs par 10 c'est absolument ALLUCINANT ( VBO activé sur tout les test ).
Si vous avez une explication ou une solution pour les triangles selectors je suis preneur. Car je les utilisaient afin de faire du ray casting et détecter la collision de mon rayon sur mes mesh.
merci d'avance de votre aide.
Hors ligne
As-tu moyen de faire un petit isolant ton soucis, cela permettrait d'un peu mieux cerner l'origine du problème ?
Hors ligne
j'ai effectivement isolé le problème des test de collision avec les triangle selector.c'est du sparadrop mais bon .. sa tien
Cependant depuis je rencontre un soucis avec le getSceneNodeAndCollisionPointFromRay() a qui je passe : la position d'une node A en pts de depart puis la position d'une node B en point d'arrivé et ma scene node qui contient bien en enfant les nodes A et B. donc logiquement je devrais avoir la node B en retour de cette fonction. Cependant je n'ai aucun retour. j'ai donc tester depuis le rootNode et idem ... Aucun retour. auriez vousune idée?
la Node A et la Node B ont toutes les 2 un triangle selector declarer de cette maniere :
irr::scene::ITriangleSelector* selector = SceneManager->createTriangleSelector(m_pAnimatedMeshSceneNode);
m_pAnimatedMeshSceneNode->setTriangleSelector(selector);
et voici le code de mon ray casting:
//Effectue un lancé de rayon pour savoir si je peu voir l'unités.
//Scene Manager
irr::scene::ISceneManager* TempSceneManager = CRenderWindow::GetRenderWindow()->GetSceneManager();
//Collision manager
irr::scene::ISceneCollisionManager* collMan = TempSceneManager->getSceneCollisionManager();
//ray casting
irr::core::line3d<irr::f32> ray;
irr::core::vector3df temppos = m_unit->Get_Position();
irr::core::vector3df tempposEnd = m_unit->Get_Focus()->Get_Position();
irr::core::vector3df tempdirection = tempposEnd - temppos;
tempdirection.normalize();
ray.start = temppos + tempdirection * 50;
ray.end = tempposEnd + tempdirection * 100;
// Tracks the current intersection point with the level or a mesh
irr::core::vector3df intersection;
// Used to show with triangle has been hit
irr::core::triangle3df hitTriangle;
EntityManager* myEntityManager = EntityManager::Get_Singleton_EntityManager();
irr::scene::ISceneNode* globalscenenode = myEntityManager->Get_GlobalSceneNode();
ISceneNode * selectedSceneNode = collMan->getSceneNodeAndCollisionPointFromRay(ray, intersection, hitTriangle, 0, globalscenenode);
if ( selectedSceneNode )
{
if ( selectedSceneNode->getID() < 0 )
{
return false;
}
}
selectedSceneNode n'a jamais aucun retour....
Hors ligne
pour expliquer le changement de perf entre les extentions, je suposerais que le code pour les *.mesh intègres les VBO ... mais pourquoi pas les autres ....
et le soucis de perf des triangles selector, je dirais que c'est a cause des mesh animer, irrlicht ne doit pas stocker chaque "frame" pour le selector, mais les recalculer a chaque update de l'animation
du coup sa suce le processeur et sa te plombe les perf, à moin de passer en multithreading, et/ou de ne pas faire un raycast(qui pompe le plus je pensse) a chaque boucle du main while je voie pas
si je trouve quelque chose pour palier au perf du raycast je te tien au courant, je bosse la dessus aussi ( 680fps->39fps sur un terrain de 5.3Million de polygone ... aie )
Hors ligne
je ne faitpas de raycasting a chaque frame et effectivement je suis en multithreading.
Hors ligne
Pages: 1