Страница 1 из 4

Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 18 июн 2009, 07:14
Zavhoz
в сцене 4 объекта (130к треугольников) фпс 600. добавляю 300 объектов (5к треугольников) фпс падает до 60... все объекты одновременно в кадре, до добавления, Draw Calls = 8. после, ближе к 600. на все добавленные объекты один материал.
может чтото упустил? заранее спасибо...

Re: Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 18 июн 2009, 10:26
ffinder
смущает 300 против 600?
на рендеринг теней тоже DrawCalls расходуются (надо же теневые буферы как-то получать)
ЗЫ: ИМХО

Re: Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 18 июн 2009, 10:52
Zavhoz
справедливо подмечено - 300 против 600. эксперементальным путём выяснилось, цифра зависит от шейдера на материале. я так понял diffuse обрабатывается в два прохода, и следовательно выдаёт 600, тот же decal всего 300... но и это не радует, фпс по прежнему глубоко провисший :-??

Re: Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 18 июн 2009, 14:01
Neodrop
Diffuse это один ДравКолл. Но, если включен pixel lighting то коллы удваиваются абсолютно на всех материалах, кроме люминисцентных.

Добавленные объекты должны быть независимы? Или их можно "склеить" ? Если можно, то используёте скрипт из Island Demo под названием CombineChildren и ваши 600 лишних дравколлов превратятся в два. :-?

Или, если объекты одинаковые, нужно их инстансировать от одного префаба.

Re: Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 18 июн 2009, 14:54
Const_47
&ffinder +100

А вообще быстродействие очень сильно зависит от применяемого материала-шейдера.

Re: Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 18 июн 2009, 16:45
Zavhoz
в данном случае все объекты должны жить самостоятельно, аттачить их никак нельзя. объекты одинаковые, но расставлять их динамически... не вариант это. если проблема не с моей стороны, то жаль что у юнити с этим так трудно... виртулз такую сцену съедал на ура.
если не затруднит, жду коментариев по поводу прикреплённого. в крайнем случае придётся делать динамическую расстановку объектов.

пару коментариев по поводу вложенного: с префабом-кучей_объектов 4,6к треугольников, без префаба 0,9. в первом случае даёт 0,6к фпс, во втором 9к...в среднем съедается 90% производительности. очень надеюсь что прблема вызвана мною.

DrawCalls.7z

Re: Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 18 июн 2009, 18:34
Neodrop
А что делать то нужно в вашем проекте? У меня более 300 fps
Что куда добавлять? :-?

Скрытый текст:
drawCallsFromForum.png

Re: Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 18 июн 2009, 18:41
Neodrop
Вообще, этот объект с цветочками, сделан из рук вон не правильно. Вам необходима реакция цветочков? Поэтому вы не хотите слить всё в один объект?

Нет ничего проще. Пишем простейший скрипт, который переберёт все ваши чилды в этом цветочном шаре и заменит их на инстанс одного-единственного цветка с размерами, позицией и вращением, идентичными исходным цветкам. Это будет гораздо производительнее для двига и в кадре ровным счётом ничего не изменится. То есть абсолютно ничего. :-? Хотя мне кажется, что 300 fps это и так нормально ;0)
Хотя, может я чего то не сделал? Так опишите задачу конкретнее. :-w

Re: Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 18 июн 2009, 20:04
Zavhoz
в сцене просто болванка, ничего кроме. согласен что сделано не лучшим образом, но делалось очень давно, ещё под виртулз, сейчас перегоняется в юнити. и заставить моделлера переделывать сейчас уже невозможно... ну да не в этом суть. в полностью "обставленной сцене" получается ~130к треугольников и выдаёт 600фпс, а с этими цветами (которых всего на 4к стреугольников) падает до 60-90фпс... на работе обстановка ещё хуже, на жирафе 6600 без цветов 60-90 фпс, с ними падает до 10-20

вот что получается у меня с цветами и без
Скрытый текст:
ScreenShot_DrawCalls.jpg


цветы живут каждый отдельно, и объединять их никак нельзя. попробую скриптом поклонировать, но на мой взгляд это не панацея. это хорошо что объекты идентичны, а если так случится что не получится клонировать... :-?

Re: Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 18 июн 2009, 20:56
Neodrop
Прочитайте ВНИМАТЕЛЬНО то, что я написал выше и не трогайте попусту моделлера.
Перебрали объекты, заменили на инстансы одного-единственного (которые, естественно, префаб), выставили им вращение и scale и всё. В результате будут совершенно те же самые цветочки, но за один проход рендера, а не за сто двадцать.

Re: Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 19 июн 2009, 09:35
Zavhoz
вопрос:
добавляю модель через Instantiate, связь с префабом теряется... похоже чтото делаю не так, каким образом надо добавлять без потери связей?

и ещё, что программно инстансить, что добавлять руками из Project в Hierarchy эквивалентно. если это так, то фокус не пройдёт... дроколлс увелчивается и в этомслучае.

в глубоком раздумье... :-?

Re: Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 19 июн 2009, 09:43
Slava
Я так понял, надо префаб одного цветка перенести из project в hierarchy, а в ней уже размножать - правая кнопка - dubliсate. Перетаскивать из project в hierarchy каждую копию - неправильно...

Re: Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 19 июн 2009, 10:22
Zavhoz
drag&drop = dubliсate, ведь в итоге все объекты оказываются производной от одного префаба

Re: Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 19 июн 2009, 11:31
Neodrop
Что так, что эдак одинаково.
Только что это за блажь - руками таскать? Скриптик не написать элементарный? :-?

Re: Много объектов, Draw Calls растёт, FPS падает. Как бороться?

СообщениеДобавлено: 19 июн 2009, 12:24
Zavhoz
скрипт то я написал, только работу с инстансом не понял до конца, поэтому и спросил:
Zavhoz писал(а):добавляю модель через Instantiate, связь с префабом теряется... похоже чтото делаю не так, каким образом надо добавлять без потери связей?

делаю следующим образом:
Код: Выделить всё
foreach (Transform child in currentEntity)
      Instantiate(flower, child.position, child.rotation);


ну а если ручное копирование не отличается от программного то вывод один - проблема с кучей дрокаллов остаётся.