Войти
IrrlichtФорум

FPS 1 - как это устранить??

#0
17:15, 4 июля 2010

Загрузили при помощи Irrlight две модели в формате 3DS. Текстуры размером 128*128. Количество полигонов в первой модели (модель человека) 52 000 и арена - 80 000. FPS не поднимается высше 9.  Нужно уменьшить количество полигонов в модели или же можно что-то сделать??
1 FPS | FPS 1 - как это устранить??


#1
22:03, 4 июля 2010

Хотя бы код что-ли показал :)
Пробовал нод арены добавлять как octree?
smgr->addOctreeSceneNode()
Если при этом будут артефакты в виде исчезновения полигонов, то надо увеличивать четвертый параметр метода.  Так же неплохо  бы выводить для отладки как и FPS количество рисуемых примитивов в кадре: driver->getPrimitiveCountDraw()
И да. Текстуры лучше сохранять в TGA. Заметил,что производительность заметно возрастает.
Еще можно включить VBO: node->getMesh()->setHardwareMappingHint(scene::EHM_STATIC);
Я сам загружал огромный меш со всеми текстурами  -мир Готики 1, уже не помню сколько там полигонов. FPS было около 80. Но еще есть что оптимизировать, например реализовать порталы, чтобы внутренние помещения не рисовались если пестронаж не внутри.

#2
0:46, 5 июля 2010

Спасибо за ответ.

#3
1:01, 5 июля 2010

К сожалению ничего не помогло. Фпс остается 1. Код загрузки моделей:

   // load model
   IMesh* mesh = smgr->getMesh("Models/bolvan.3ds") ;
           if (!mesh)
           {
                   device->drop();
                   return false;
           }
         
   // add model to scene manager
   IMeshSceneNode* node = smgr->addOctreeSceneNode( mesh );
   node->setPosition(vector3df(node->getPosition().X-10, node->getPosition().Y+23, node->getPosition().Z-10));
   node->setScale(vector3df(15,15,15));

   //after adding to scene manager all meshes become nodes.
   if (node){
                   node->setMaterialFlag(EMF_LIGHTING, false);

                   //node->setMD2Animation(scene::EMAT_STAND);
                   //node->setMaterialTexture( 0, driver->getTexture("Models/sydney.bmp") );
   }


    scene::IMesh* meshArena = smgr->getMesh("Models/ruins/ruins.3ds");
            //IAnimatedMesh* meshArena = smgr->getMesh();
    //scene::IAnimatedMesh* meshArena = smgr->getMesh("Models/ACME_BLD.3DS");
   // scene::IAnimatedMesh* meshArena = smgr->getMesh("Models/SIGNAL/SIGNAL_L.3DS");
    if (!meshArena){
            device->drop();
            return false;
    }

    IMeshSceneNode* nodeArena = smgr->addOctreeSceneNode(meshArena;
    if (nodeArena){
        nodeArena->setScale(vector3df(15,15,15));
        nodeArena->setRotation(vector3df(-90,0,0));
        nodeArena->setMaterialFlag(EMF_LIGHTING, false);
    }

#4
1:24, 5 июля 2010

Даже не знаю...
С octree число рисуемых полигонов в кадре значительно меньше. А вот для персонажа octree лучше не делать, все равно он постоянно в кадре. Пробовал для арены VBO?

nodeArena->getMesh()->setHardwareMappingHint(scene::EHM_STATIC)
И на сколько нод разбивается octree? Это в консоли должно выводится.
Можно еще с дальностью куллинга поиграться...
camera->setFarValue(тут число дальность прорисовки);

#5
19:32, 5 июля 2010

VBO пробовал, но не помгло. Когда ставлю рендеринг тип EDT_SOFTWARE или EDT_BURNINGSVIDEO, то FPS возростает до 7. На другом компьютере FPS 9.

#6
6:34, 6 июля 2010

А сколько FPS будет с одной ареной?

У меня для сравнения без Octree  FPS 50-78 при количестве полигонов 81986.  Тип устройства EDT_DIRECT3D9. Количество мешбуферов 968.
Текстур довольно много, общий вес больше 100мб. Производительность сильно зависит от количества нод и количества мешбуферов.
Количество мешбуферов можно получить как:

meshArena->getMeshBufferCount();

#7
15:59, 6 июля 2010

>первой модели (модель человека) 52 000
эта моделька видимо для статического рендеринга, тебе надо ее за-LowPoly-ть, для сравнения к примеру в модельке quake2 порядка 300 вершин и 600 поликов... вот и думай, хотя если ты в перспективе делаешь игрульку под карточки от 12тыщ рублей то может это и так важно.

>арена - 80 000
в каталоге ирлихта запусти irrlicht\bin\Win32-VisualStudio\Demo.exe
там грузится уровень от quake3 на основе BSP деревьев и выдает на моем "позавчерашнем" GForce 7600 GT - 200фпс на 2.7 лимона треугольников в секунду

так что вся проблема думаю в твоей не оптимизированной модели человечка.
попробуй грузануть вместо нее какую-нить другую модельку, к примеру irrlicht\media\sydney.md2

#8
19:23, 6 июля 2010

Я EDT_DIRECT3D9 не пробовал использовать. Нету библиотек по MinGW скомпиленных с директом вместе. Надо будет попробовать самому скомпилить, но если у кого есть то буду весьма рад.

#9
20:31, 6 июля 2010

Попробовал запустить свое под OpenGL. Производительность заметно упала -FPS 30.  С Direct3D9 производительность выше.
С библиотекой для GCC помочь не могу, так как сам пользуюсь MS VC++ 2008 EE...

#10
11:23, 7 июля 2010

про отношение ирлихта и микрософта читать здесь

Решать данную проблему меняя компиляторы и деиксы с огеелами - это "квартет" крылова.
Пусть DX шустрее OGL на 10% и у тебя 1fps на OGL, то если верить математике то, на DX у тебя будет 1.1fps

А если вдруг по невероятно жестокой форсмажорной необходимости понадобится, чтобы по арене забегало два человечка по 52к поликов каждый ?

#11
13:38, 7 июля 2010

Использование MS VC++ и Direct3D9 это лишь мое предпочтение :)

По сабжу думаю, что дело не только в коде и мешах. Возможно  проблема в самих драйверах видеокарты. Так как не может при нормальных условиях при таком количестве полигонов давать 1 FPS -иррлихт не настолько слаб.

And1, если есть желание, можешь выложить свои модели с текстурами -у себя попробую собрать.

#12
14:17, 7 июля 2010

>Возможно проблема в самих драйверах видеокарты
ну тогда это проблема с драйверами уже как минимум на двух компах, так что...

>Так как не может при нормальных условиях при таком количестве полигонов давать 1 FPS
возможно, но и возможно, что есть разница в обработке моделей 3д уровней и обычных анимированных моделей

>And1, если есть желание, можешь выложить свои модели с текстурами -у себя попробую собрать.
для чистоты эксперимента хороший вариант

#13
16:10, 7 июля 2010
>возможно, что есть разница в обработке моделей 3д уровней и обычных анимированных моделей

Я так понял модель человека у него не анимирована -обе модели в 3ds формате. Тип мешей и нодов тоже одинаковы значит и обработка должна быть одинакова. Разве нет?
Разница только в том, что полигоны арены рисуются только те которые попадают в фруструм, а модель человека не кулится.
#14
16:36, 7 июля 2010

>Разница только в том, что полигоны арены рисуются только те которые попадают в фруструм, а модель человека не кулится.
полностью согласен, обе добавлены как октришки и выводятся как статические ноды...
тогда считаем что дело в дровах и далее без исходников с загружаемыми ресурсами только догадками маятся

IrrlichtФорум

Тема в архиве.