4-5 drawcall'ов на простой объект. Почему так много?

Раздел, посвящённый самому важному - скорости.

4-5 drawcall'ов на простой объект. Почему так много?

Сообщение alexz 19 июн 2011, 23:32

Движок а-ля Майнкрафт:

Кубики объединены в секции по 16x16 кубиков. Одна секция ― это один меш с одним или несколькими материалами. Без пиксельного освещения один объект кушает 1 drawcall, а с пиксельным что-то многовато выходит.

Выключаю рендеринг одной секции: drawcalls = 162
Изображение

Включаю рендеринг, но без отбрасывания теней: drawcalls = 164
Изображение

Включаю тени тоже: drawcalls = 166
Изображение

Получается, что один объект с одним простым diffuse-материалом рисуется за 4 приёма.

----------------------
Ещё пример.

Выключаю рендеринг одной секции: drawcalls = 1688
Изображение

Включаю рендеринг, но без отбрасывания теней: drawcalls = 1690
Изображение

Включаю тени тоже: drawcalls = 1693
Изображение

Уже пять drawcall'ов на один объект из одного материала, четырёх вершин и двух треугольников. Интересно, что если подойти поближе, то тот же объект будет тратить не пять, а снова четыре drawcall'а. Не могу понять, почему?

----------------------
Я бы может и не обратил внимание на количество drawcalls, но меня смущает тот факт, что если выключить пиксельное освещение (у источника света поставить Render mode = Not important), то мои 1693 drawcalls мгновенно падают до 352. Т.е. более чем в четыре раза, даже учитывая batching.

Изображение
alexz
UNITрон
 
Сообщения: 270
Зарегистрирован: 16 ноя 2010, 23:37

Re: 4-5 drawcall'ов на простой объект. Почему так много?

Сообщение discouraged_one 20 июн 2011, 10:29

какие шейдеры сколько источников освещения
multi-pass скорей всего
Unity Technologies
Аватара пользователя
discouraged_one
Unity Technologies
 
Сообщения: 197
Зарегистрирован: 19 май 2010, 15:56

Re: 4-5 drawcall'ов на простой объект. Почему так много?

Сообщение waruiyume 20 июн 2011, 12:22

Different rendering + multi-pass = (полная Ж) (я ведь не ошибся насчет Different rendering ?)
Town <тестовый уровень>
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: 4-5 drawcall'ов на простой объект. Почему так много?

Сообщение Guyver 20 июн 2011, 14:43

не Different :)) а Deffered (отложенный)

я вот не очень знаю всю кухню внутри ... но как минимум Early Z + дифуз + лайт ... + может occlusion

а если отложенное освещение то там G buffer заливается.
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: 4-5 drawcall'ов на простой объект. Почему так много?

Сообщение alexz 20 июн 2011, 15:49

Рендеринг - forward.

Источник света - один отбрасывающий тени directional light. Есть ещё один directional light для подсветки сзади, но он работает в режиме vertex lighting и на drawcall'ы не влияет вообще. Его можно выключить, ничего не изменится.

Материал на большинстве объектов - простой Diffuse. На некоторых объектах висит несколько таких материалов, но про них я не говорю - там понятно, что drawcall'ы удваиваются и утраиваются.

На скриншотах видно и материал, и источник света.
alexz
UNITрон
 
Сообщения: 270
Зарегистрирован: 16 ноя 2010, 23:37

Re: 4-5 drawcall'ов на простой объект. Почему так много?

Сообщение Neodrop 20 июн 2011, 15:56

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

Re: 4-5 drawcall'ов на простой объект. Почему так много?

Сообщение alexz 20 июн 2011, 16:08

Neodrop писал(а):1 пиксельный источник света с тенями это всегда Х4 дракулы. Хотите одного графа дракулу пригласить, ставьте VertexLit ;)

1. Рендеринг в shadow map.
2. Рендеринг на экран.

А ещё 2 куда?
alexz
UNITрон
 
Сообщения: 270
Зарегистрирован: 16 ноя 2010, 23:37

Re: 4-5 drawcall'ов на простой объект. Почему так много?

Сообщение Neodrop 20 июн 2011, 16:50

Вот чесно слово, не помню. 100500 раз на форуме писалось про это.
2 прохода на пиксельный свет.
2 на тени.
Если шейдеры сложные, с нормалами, то ещё парочка добавится.
Постэффекты тоже могут накидать.
Интересуетесь знать почему? Поройте форум.

P.S. количество ДК не прямой показатель производительности.

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

Re: 4-5 drawcall'ов на простой объект. Почему так много?

Сообщение Guyver 21 июн 2011, 12:44

ну вот пальцем в небо как оно может быть:
ранний Z
Дифуз
Свет
Тень

итого уже 4 ... возможно немного не так у ребят, я не в курсе. но какая разница то?

я когда свой велосипед изобретал ... у меня было по проходам:
дифуз (он же заливка Z)
Свет батчился группами до 4х источников (или 3х .. уже не помню где я упёрся по инструкциям)
Тень (включая цветные от прозрачных обьектов .. по чесноку от поинт лайтов)
Оклюжен .. помоему
ещё отражения всякие и прочее ...

и ничего .. работало. и далеко не самый ботлнек было.
Xcombat: 3D шутер на летающих тарелках!
Аватара пользователя
Guyver
UNIверсал
 
Сообщения: 392
Зарегистрирован: 21 июл 2010, 08:04
Откуда: Челябинск

Re: 4-5 drawcall'ов на простой объект. Почему так много?

Сообщение alexz 21 июн 2011, 19:28

Бред какой-то: при включенном в источнике света пиксельном освещении объект даже с материалом VertexLit и выключенными CastShadows/ReceiveShadows всё равно ест 2 drawcall'а. Что Diffuse, что VertexLit ― разницы никакой. На камере никаких эффектов нет.

Попробую на новом пустом проекте.
alexz
UNITрон
 
Сообщения: 270
Зарегистрирован: 16 ноя 2010, 23:37

Re: 4-5 drawcall'ов на простой объект. Почему так много?

Сообщение alexz 21 июн 2011, 22:27

На сцене плоскость, над ней два кубика и сверху один или несколько directional light. У объектов одинаковый diffuse-материал. Считаем draw call'ы (DC):

Rendering path: Forward

Кол-во DC на объект =
+1 в любом случае
+N по количеству источников света в режиме пиксельного освещения (не важно, с тенями или без)
+1 если объект может отбрасывать (cast shadows) и отбрасывает тени при наличии хоть одного источника пиксельного освещения со включенными тенями

Т.е. если объект отбрасывает тени и есть один источник света, то будет 3 DC. Если не отбрасывает, то 2 DC.
Т.е. если объект отбрасывает тени и есть два источника света, то будет 4 DC. Если не отбрасывает, то 3 DC.
Т.е. если объект отбрасывает тени и есть три источника света, то будет 5 DC. Если не отбрасывает, то 4 DC.

Примечание: если у источников света не задавать режим принудительно, то первые три становятся пиксельными, последующие ― вершинными.

Статический батчинг работает.
Динамический батчинг работает только у объектов, которые не отбрасывают тени (или cast shadows выключен, или источники света без теней).

Rendering path: Deferred Lighting

Кол-во DC на объект =
+2 в любом случае
+N по количеству источников света, от которых объект может и отбрасывает тени

Т.е. если объект отбрасывает тени и есть один источник света, то будет 3 DC. Если не отбрасывает, то 2 DC.
Т.е. если объект отбрасывает тени и есть два источника света, то будет 4 DC. Если не отбрасывает, то 2 DC.
Т.е. если объект отбрасывает тени и есть три источника света, то будет 5 DC. Если не отбрасывает, то 2 DC.

Rendering mode в настройках источника света ни на что не влияет.

Статический батчинг работает.
Динамический не работает вообще.

----------------------------------------------------
Получается, что с тенями от одного источника света простые объекты должны потреблять 3 DC. Остаётся понять, почему в моей майнкрафтовской сцене они едят по 4 или 5.
alexz
UNITрон
 
Сообщения: 270
Зарегистрирован: 16 ноя 2010, 23:37

Re: 4-5 drawcall'ов на простой объект. Почему так много?

Сообщение Neodrop 22 июн 2011, 01:35

Не на объекте шейдер VertexLit, а Rendering Path VertexLit
Это разные вещи. При абсолютно любом шейдере, в режиме пиксельного света у вас будет минимум два дракулы.

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

Re: 4-5 drawcall'ов на простой объект. Почему так много?

Сообщение alexz 22 июн 2011, 14:20

Я выяснил, в том числе с помощью и этого, и официального форумов, что DC увеличивают следующие вещи:
- несколько материалов на объекте,
- многопроходные шейдеры,
- deferred rendering, который большинство шейдеров делает многопроходными,
- пиксельные источники света,
- включенное отбрасывание объектом теней,
- наличие некоторых эффектов на камере.

Теперь ищу ответ, почему объект из двух треугольников с одинарным Diffuse-материалом, одним пиксельным светом с тенями, в режиме forward rendering, без дополнительных эффектов на камере потребляет не 3 DC, как положено, а 4 или 5 DC? Можно вообще все остальные объекты убрать со сцены, всё равно остаётся минимум 4 DC.

Дело не в том, много это или мало, хороший у меня fps или нет. Я хочу понимать, что происходит. Если у меня изначально косяк, то нужно его сразу же и исправлять.
alexz
UNITрон
 
Сообщения: 270
Зарегистрирован: 16 ноя 2010, 23:37


Вернуться в Оптимизация

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

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