Чего то недопонимаю

Обсуждение специальной версии Magic Particles (Dev), предназначенной для разработчиков игр.

Чего то недопонимаю

Сообщение fmind » Сб сен 26, 2009 5:40 pm

Здравствуйте уважаемые товарищи )
Ситуация такова: изучал туториал портирования частиц под движок HGE, читал хелпу. Потихоньку ковыряясь в исходниках всё таки смог подключить систему частиц в свой проект, взял стандартный эфффект взрыва Explosion2 из fire набора. Экспортировал его как API с картинками. Всё компилируется нормально. Но когда эффект этот воспроизводится в игре, то просто жуткие тормоза идут, процессор забивается под 100% ... В чом дело понять не могу.. Создаю эффект так:

MP=new MP_Manager;
MP->Initialization(MAGIC_INTERPOLATION_ENABLE, MAGIC_NOLOOP, MAGIC_CHANGE_EMITTER_ONLY, "temp");
if(MP->LoadEmittersFromFile("anm/bum.ptc")==MAGIC_SUCCESS)
std::cout<<"Emiter Loaded"<<std::endl;

MP->LoadTextures(0/*"textures/"*/,256,256,1,0.1f);
MP->CloseFiles();

MP_Emitter* emitter=MP->GetEmitter(0);
emitter->SetState(MAGIC_STATE_UPDATE);
MP_POSITION pos;
emitter->GetPosition(pos);
pos.x+=SCREEN_WIDTH/2;
pos.y+=SCREEN_HEIGHT/2;;
emitter->Move(pos);

В функции просчёта для частиц делаю так:

static unsigned long last_time=0;
double rate=0.01;
unsigned long time=GetTickCount();
if (time>last_time)
{
rate=time-last_time;
last_time=time;
if (rate>500)
rate=0.01;
}
MP->Update(rate);

MP_Emitter* emitter=MP->GetEmitter(0);
if(emitter->GetState()==MAGIC_STATE_STOP)
{
emitter=MP->GetEmitter(0);
emitter->SetState(MAGIC_STATE_UPDATE);
}
Всё по примеру впринципи. Ну и потом рендер
MP_Emitter* emitter=MP->GetEmitter(0);
emitter->Render();

ЧТо я мог сделать не так? Или что упустил ? Коментирую GetTickCounts() работает норм, тока не апдейтится соответственно, а с ним жуткие зависоны.. Подскажите чего, заранее благодарен :D
fmind
 
Сообщения: 32
Зарегистрирован: Сб сен 26, 2009 5:10 pm

Re: Чего то недопонимаю

Сообщение Odin_KG » Вс сен 27, 2009 1:42 am

>ЧТо я мог сделать не так? Или что упустил ? Коментирую GetTickCounts() работает норм, тока не апдейтится соответственно, а с ним жуткие зависоны.. Подскажите чего, заранее благодарен
Какова конфигурация компьютера? Explosion2 вроде 700 частиц только делает, т.е. относительно немного. Вроде должен тянуть почти любой компьютер. Еще есть такой момент: в режиме debug FPS обычно всегда не более 30 (по крайней мере на моей видеокарте GF6600GT). Вообще имейте ввиду, что эффекты для игр и эффекты для дизайна - это принципиально разные вещи - дизайнеры вообще не понимают, что нужно экономить ресурсы процессора. Эффекты, которые входят в состав Magic Particles никто не оптимизировал для игр :D.

А FPS должен падать, конечно. Вообще частицы - это достаточно дорогое удовольствие.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: Чего то недопонимаю

Сообщение fmind » Вс сен 27, 2009 10:52 am

Дизайнерство, вот оно чо :o У меня 2,6 Интел и GeForce6600 тоже :D Я вот вчера ещё попробывал разные другие эффекты, работают БЕЗ тормозов тока те, которые из колеекции Efects, пламя, взрыв от туда работают вообще ровно, хоть бы что вообще, остальные бесполезно. Хотя по характеристикам они не атк сильно отличаются, на мой взгляд :shock: Подскажите, что менять следует чтоб приемлемо для игр было, какие циферки где изменить :) Столкнулся с частицами можно сказать совсем недавно, полный нуб ) Читал твою статью на сайте, очень интересно для познавания и обзора так сказать. Но всё таки хотелось бы получить конкретные рекомендации, так скзатаь по опыту, что менять нужно =) :D Вот наглый я да ?)) :D
fmind
 
Сообщения: 32
Зарегистрирован: Сб сен 26, 2009 5:10 pm

Re: Чего то недопонимаю

Сообщение Odin_KG » Вс сен 27, 2009 11:02 am

ну, дык, если статью читал, то я и не знаю, что еще добавить :D. В статье как раз и написано, что важно для быстродействия. Часто делают так: рисуют красивую текстуру с анимацией, а частиц делают мало, т.е. часто анимацию рисуют прямо на текстуре. Доходит до того, что берут готовый красивый взрыв и превращают его в текстуру, а потом крутят в виде анимации на одной частице. Получается дешево и сердито, но, в принципе, тогда и редактор частиц не очень нужен :D. В общем ознакомьтесь с проектами, которые уже изданы, возможно они вам что-то подскажут.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: Чего то недопонимаю

Сообщение fmind » Пн сен 28, 2009 4:17 pm

Вот реально тупость какаето... :evil: Непонятные исходники этих врапперов... Нет чтоб просто показать как загрузить ОДИН эмиттер и заюзать его, насозщданы всякие менеджеры частиц тупые MP_Manager, который впринципи бесполезный и громоздкий... :evil: А элеменатарный примитив показать - ничего подобного :evil: Раздражает нереально...
fmind
 
Сообщения: 32
Зарегистрирован: Сб сен 26, 2009 5:10 pm

Re: Чего то недопонимаю

Сообщение Odin_KG » Пн сен 28, 2009 4:34 pm

Ну, я раньше может меня бы это и задело, а сейчас я понял, что на всех не угодишь. Сейчас же враппер сделан так, что почти "годен к употреблению". В принципе, можете выбросить враппер и по справке API.chm сделать то, что вам нужно.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: Чего то недопонимаю

Сообщение fmind » Пн сен 28, 2009 6:07 pm

Я так и сделал подчти. Сами частицы хороши, тока сильно постарались при создании врапа, горе от ума как говорится. И что то у врапа функция DuplicateEmitter при её использовании проект вылетает в процессе использования уже. Обычными API функциями такая же ситуация... :( Может есть рабочий код или его фрагмент где дублирование используется хоть каким способом? Чтоб воотчию так сказать увидить. Вообще я этим хочу исправить следующую ситуацию: когад например начинается анимация взрыва, и под её конец начинает проигрываться ещё одна анимация взрыва, то получается что и первая и вторая анимации гаснят одновременно, а хочется чтоб вторая доигрывалась с начала и до конца, а не с того места что и первая. Счётчик Update общий для всех систем частиц, поэтому и гаснут они одновременно по одному закону. Дубликэйт же решит эту проблему ?
fmind
 
Сообщения: 32
Зарегистрирован: Сб сен 26, 2009 5:10 pm

Re: Чего то недопонимаю

Сообщение fmind » Пн сен 28, 2009 6:20 pm

static unsigned long last_time=0;
double rate=0.01;
unsigned long time=GetTickCount();
if (time>last_time)
{
rate=time-last_time;
last_time=time;
if (rate>500)
rate=0.01;
}
MP->Update(rate);

Вот эта часть кода жёстко сделана :) Единственное её предназначение это выяснение времени прошедшего между кадрами, во-первых очень громоздко, во-вторых GetTickCount функция из WinAPI что требуетдополнительного подключение windows.h , а размеры у неё не малые, отягощать проект её не хотелось бы. Решение просто для интеграции в HGE, весь этот блок заменяется однйо строкой:
MP->Update(hge->Timer_GetDelta()*1000);
И всё. и виндоус.h можно убрать. Хоть там и есть функции FindFirstFile в инициализации мэнэджера, можно тоже их урезать и заменить чем нибудь. Ваш покорный слуга :D
fmind
 
Сообщения: 32
Зарегистрирован: Сб сен 26, 2009 5:10 pm

Re: Чего то недопонимаю

Сообщение Odin_KG » Пн сен 28, 2009 7:06 pm

Сами частицы хороши, тока сильно постарались при создании врапа, горе от ума как говорится.

Давайте не будем себя вести как самый умный. Горе обычно не от ума, а от самомнения.

И что то у врапа функция DuplicateEmitter при её использовании проект вылетает в процессе использования уже.

Ну, не знаю. У меня копия исправно создается.

Может есть рабочий код или его фрагмент где дублирование используется хоть каким способом? Чтоб воотчию так сказать увидить.

Через враппер так:
int copy=MP->DuplicateEmitter(MP->GetEmitter(0));
дублируется самый первый эмиттер

Счётчик Update общий для всех систем частиц, поэтому и гаснут они одновременно по одному закону. Дубликэйт же решит эту проблему ?

Можно сбросить частицы в эмиттере через Magic_Stop, также можно перемещать позицию анимации при помощи Magic_SetPosition.

во-первых очень громоздко

Задача здесь не только отсчитывать время, но и проверять на то, что времени прошло слишком много (например, из-за больших расчетов). В этом случае используется маленькое приращение времени.

во-вторых GetTickCount функция из WinAPI что требуетдополнительного подключение windows.h , а размеры у неё не малые, отягощать проект её не хотелось бы.

Из windows.h линкуется только то, что было использовано, т.е. GetTickCount.

Решение просто для интеграции в HGE, весь этот блок заменяется однйо строкой:
MP->Update(hge->Timer_GetDelta()*1000);

Моя задача сделать так, чтобы в разных врапперах было как можно меньше переделок. А, во-вторых, такое решение неверно, потому что потери скорости на расчет частиц зависят от времени приращения.

И всё. и виндоус.h можно убрать. Хоть там и есть функции FindFirstFile в инициализации мэнэджера, можно тоже их урезать и заменить чем нибудь.

Дык, урезайте и меняйте что желаете.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: Чего то недопонимаю

Сообщение fmind » Вт сен 29, 2009 3:08 pm

Давайте не будем себя вести как самый умный. Горе обычно не от ума, а от самомнения.


Хорошая фраза, возьму себе на заметку :D Наверно это юнешеский максимализм :oops: Попробую ещё с дублированием поэксперментировать.
fmind
 
Сообщения: 32
Зарегистрирован: Сб сен 26, 2009 5:10 pm

След.

Вернуться в Magic API

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

cron