#0 

22-03-2011 12:15:43

motohime
Petit nouveau
Date d'inscription: 09-03-2011
Messages: 8

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


#1 

22-03-2011 13:15:23

ramis
Membre
Date d'inscription: 27-10-2008
Messages: 92

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


#2 

22-03-2011 16:06:31

mmorpglefilm
Abonné
Lieu: la galaxie UDFy-38135539
Date d'inscription: 18-05-2010
Messages: 162
Site web

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


#3 

22-03-2011 18:41:06

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

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.

wink


Force et sagesse...

Hors ligne


#4 

22-03-2011 18:52:02

motohime
Petit nouveau
Date d'inscription: 09-03-2011
Messages: 8

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


#5 

22-03-2011 19:06:04

motohime
Petit nouveau
Date d'inscription: 09-03-2011
Messages: 8

Comment utiliser cette methode pour les IAnimatedSceneNode plz ?

Hors ligne


#6 

22-03-2011 20:32:07

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

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 )


Force et sagesse...

Hors ligne


#7 

22-03-2011 23:45:45

motohime
Petit nouveau
Date d'inscription: 09-03-2011
Messages: 8

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


#8 

23-03-2011 18:36:55

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

As-tu moyen de faire un petit isolant ton soucis, cela permettrait d'un peu mieux cerner l'origine du problème ?


Force et sagesse...

Hors ligne


#9 

23-03-2011 20:03:44

motohime
Petit nouveau
Date d'inscription: 09-03-2011
Messages: 8

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


#10 

24-03-2011 00:29:29

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 910
Corrections: 2
Site web

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


#11 

24-03-2011 10:17:47

motohime
Petit nouveau
Date d'inscription: 09-03-2011
Messages: 8

je ne faitpas de raycasting a chaque frame et effectivement je suis en multithreading.

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
36 invités en ligne
Aucun membre connecté
RSS Feed