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

Общие вопросы о Unity3D

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

Сообщение Neodrop 19 июн 2009, 12:30

Связь с префабом не теряется при инстансировании.
В этом коде : Instantiate(flower, child.position, child.rotation); параметр flower является префабом ? Не объектом из префаба с сотней цветочков, а именно отдельным префабом?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

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

Сообщение Zavhoz 19 июн 2009, 12:42

да, flower является префабом, с одним единственным цветком внутри. одно но, делаю это в эдиторе, а не в прогоне.
FUNNY BLOX
Аватара пользователя
Zavhoz
UNITрон
 
Сообщения: 197
Зарегистрирован: 10 фев 2009, 07:23
Откуда: Караганда KZ
  • ICQ

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

Сообщение Neodrop 19 июн 2009, 12:54

Я провёл быстрый эксперимент. Замена вашего гербария на копии префаба, в моём случае не снижает дравколлов (что естественно), но :
С вашим гербарием - 340 fps
C копиями префаба - 640 fps (причём 640 у меня и в полностью пустой сцене (без цветов вообще), так что это, видимо предел производительности для моей карты).

Практически двухкратный прирост производительности. За счёт того, что меш один на всех. Я сделал немного грязновато - не все цветочки получают то же вращение, что и оригиналы, но посмотреть, всё-таки, можно - протестите у себя.

Код: Выделить всё
using UnityEngine;
using System.Collections;
/// <summary>
/// src - гербарий.
/// prefab - префаб  цветочка для копирования.
/// Повесить скрипт, скажем - на камеру...
/// </summary>
public class NewBehaviourScript : MonoBehaviour {

    public GameObject src;
    public GameObject prefab;

   // Use this for initialization
   void Start ()
    {
        int count = src.transform.GetChildCount();
        for (int i = 0; i < count; i++)
        {
            Transform child = src.transform.GetChild(i);
            Instantiate(prefab, child.transform.position, child.transform.rotation);
        }
        Destroy(src);
   }
}
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

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

Сообщение Neodrop 19 июн 2009, 13:02

По-сути, хоть количество дравколлов в окошке статистики и не уменьшается, прорисовка происходит всего за два вызовы, а не за 355 как в вашем исходном варианте.
Сколько можно сопротивляться очевидному то? :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

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

Сообщение Zavhoz 19 июн 2009, 13:33

попробовал скрипт. что сразу ложить все, что скриптом динамически добавлять - один и тот же фпс: 15-18 (жыфорс 6600гт).

изначально ставил вопрос, проблема с моей стороны, или это юнити так устроен :-\ сейчас ситуация прояснилась... пойду бубен доставать... щаманить буду 8-x
FUNNY BLOX
Аватара пользователя
Zavhoz
UNITрон
 
Сообщения: 197
Зарегистрирован: 10 фев 2009, 07:23
Откуда: Караганда KZ
  • ICQ

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

Сообщение Neodrop 19 июн 2009, 13:59

То есть у меня разница вдвое, а у вас фиг в нос? :-?
Префаб для единичного цветка создан? Карта тут явно ни при чём.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

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

Сообщение ffinder 19 июн 2009, 14:10

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

сразу ответ: в настройках источника света поменять Render Mode с Auto на Force Vertex. фпс с 45 подскочил до 165 (GeForce 6100). 332 draw calls
насчет дипов с Force Pixel освещением:
без источников света на 1 renderer - 1 draw call
1 источник: 1 renderer - 2 draw calls
2 и больше источников света - 3 draw calls

заглянул в normal-diffuse shader 8() ПЦ :-

про инстансинг: hardware geometry instancing работает только на шейдерах 2.0а (ATi), 3.0(nVidia). можно забыть сразу (в казуалках).
можно действительно слепить все в один Mesh и одним дипом выводить, если сильно нужно именно попиксельное освещение.
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

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

Сообщение ffinder 19 июн 2009, 14:13

Neodrop писал(а):По-сути, хоть количество дравколлов в окошке статистики и не уменьшается, прорисовка происходит всего за два вызовы, а не за 355 как в вашем исходном варианте.

откуда такая уверенность без NVperfHUD'a?
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

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

Сообщение Neodrop 19 июн 2009, 14:59

У меня установлен PerfHUD. Или вы не в курсе, что он работает с [unity 3D] Unity ? Тогда рановато щёки дуть. :-?

Смотрим Хардварную статистику http://unity3d.com/webplayer/hwstats/pa ... hader.html
В результате видим, что карты БЕЗ 2.0 составляют только 20% рынка. :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

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

Сообщение ffinder 19 июн 2009, 15:13

скрин с перфхуда или не верю
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

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

Сообщение Neodrop 19 июн 2009, 15:57

Мне глубоко по-барабану верите или нет. Нужно читать описание программы, с которой вы работаете, а не дуть щёки, изображая из себя знатока там, где только сверху поглядели малость. :-?
Тем не менее, ниже скрин. Он показывает, что коллов меньше действительно не стало, значит прорисовка ускоряется за счёт хардварного инстансинга.

Скрытый текст:
PerfHUD.png
У вас нет доступа для просмотра вложений в этом сообщении.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

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

Сообщение Zavhoz 19 июн 2009, 17:34

Neodrop писал(а):Префаб для единичного цветка создан? Карта тут явно ни при чём.

могу уверить, сделал всё как надо...
на 6600 я тестил скрипт в заполненой сцене, и прироста никакого, как 15-18 фпс в любом случае.
сейчас попробовал на жифорс 8800 в полной сцене с 90 поднялось до 140; в примере который выкладывал с 600 до 900... т.е. прирост есть, но наблюдается он на более мощных карточках, либо системах в общем... с казуалками действительно придётся туговасто :-w

ffinder писал(а):сразу ответ: в настройках источника света поменять

если я не ошибаюсь, пример выкладывал вообще без источников света :-??

мысли вслух:
можно поколдовать с клипингом, но тогда появляется вероятность провисания при резком изменении количества объектов в зоне "видимости"
FUNNY BLOX
Аватара пользователя
Zavhoz
UNITрон
 
Сообщения: 197
Зарегистрирован: 10 фев 2009, 07:23
Откуда: Караганда KZ
  • ICQ

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

Сообщение Const_47 19 июн 2009, 18:10

2 и больше источников света - 3 draw calls + больше ;)
Const_47
Герой Форума
 
Сообщения: 271
Зарегистрирован: 23 мар 2009, 19:24
Откуда: Украина. Львов\Новояворовск

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

Сообщение ffinder 19 июн 2009, 21:04

Const_47 писал(а):2 и больше источников света - 3 draw calls + больше ;)

твоя правда.
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

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

Сообщение bakca 10 сен 2009, 12:58

А не помогает MeshMerger?
Который вот тут в компонентной реализации выложен: http://www.unifycommunity.com/wiki/inde ... MeshMerger
Я правда компоновал с его помощью спрайты (двухтреугольниковые плэйны). Результат поразительный.
Разумеется у объектов должен быть один и тот же материал - как раз ваш случай.
Если надо, могу выложить не-компонентный класс того же MeshMerger-а, переведенный на яваскрипт. Переделал, чтобы была возможность повторно вызывать компоновщик при добавлении-удалении объектов.
Аватара пользователя
bakca
UNец
 
Сообщения: 19
Зарегистрирован: 03 авг 2009, 11:10

Пред.След.

Вернуться в Общие вопросы

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

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