Когда Unity рисует сцену, она не “стримит картинку”, а отдельно отрисовывает каждый объект.
Перед каждым рендером процессор говорит видеокарте:
“Вот меш, вот материал, вот позиция - рисуй”
Такая команда называется Draw Call.
Если у тебя на сцене 100 объектов - будет 100 Draw Calls.
И каждое обращение CPU → GPU стоит времени.
Почему это проблема
Видеокарта отлично справляется с рендером, но процессор задыхается, когда надо постоянно передавать команды.
Чем больше объектов и материалов - тем выше нагрузка на CPU, и тем ниже FPS.
Как сократить Draw Calls
Согласитесь - было бы эффективнее один раз передать информацию о многих объектах со сцены, а не передавать её маленькими кусочками.
В Unity есть такой механизм. Это называется Batching.
Делится на два вида:
1. Static Batching - для неподвижных объектов.
Если у тебя есть объекты на сцене, которые не будут двигаться (стены, окружение, декор) - отмечай их галочкой Static. Найти её можно в верхнем-правом углу в инспекторе объекта.
Unity объединит их в один большой меш на этапе сборки сцены.
2. Dynamic Batching - для подвижных.
Включается в Edit → Project Settings → Player → Other Settings → Dynamic Batching.
Автоматически будет работать для всех остальных объектов, не попавших в Static Batching. Наиболее эффективен для маленьких объектов.
Главное условие работы batching’а
Объекты должны использовать один и тот же материал.
Если у каждого свой - batching не сработает.
Поэтому, одна из твоих задач - сократить количество используемых материалов.
Конечно, оставить один материал на всю игру невозможно - но это и не требуется.
Как проверить количество Draw Calls
В Game View → Stats смотри строчку Batches.
Это количество вызовов после всех оптимизаций.
Ориентиры, рекомендуемые Unity:
До 200 Draw Call - для мобильных
До 2000 Draw Call - для ПК
Итог
Draw Calls - количество "приказов" от CPU на GPU отрисовать объект.
Меньше приказов = меньше лагов и больше FPS.
Для уменьшения - сокращение количества материалов, использование Static Batching для неподвижных объектов, Dynamic Batching - для подвижных.
🚀 Пост Guru Unity: @Minerope
