Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Unity : draw, call

Что такое draw call и как уменьшить их количество?

Проверяет знание GPU-пайплайна и оптимизации графики — ключевой темы для производительности.

Короткий ответ

Draw call — это команда GPU «отрисуй этот объект с этим материалом». Много draw calls замедляют игру, особенно на мобильных устройствах. Уменьшить их можно с помощью batching (Static/Dynamic), объединения мешей, атласа текстур, сокращения материалов, GPU Instancing, SRP Batcher и упрощения рендера. Главное — минимизировать количество уникальных материалов и переключений состояния рендера.

Длинный ответ

Что такое draw call

Определение: Команда от CPU к GPU, запускающая рендер одного меша с материалом.

Каждый объект, который не может быть объединён, является отдельным draw call.

Draw call включает:

  • загрузку материала

  • настройку шейдеров

  • передачу вершинных данных

  • сам рендер меша


Почему draw calls дорогие

1. CPU → GPU синхронизация

Происходит переключение контекста.

2. Переключение материалов (Material SetPass)

Самый дорогой этап.

3. Каждому объекту нужны:

  • Uniforms

  • Transform matrices

  • Shader keywords

На мобильных каждый draw call может стоить десятки микросекунд.


Основные способы уменьшения draw calls

1. Static batching

Объединение неподвижных объектов в один большой меш.

Требования:

  • объект помечен как Static

  • материалы одинаковые

Преимущества:

  • огромное снижение draw calls

Недостаток:

  • больше памяти для объединённых мешей


2. Dynamic batching

Объединяет маленькие меши в динамике.

Требования:

  • одинаковый материал

  • маленькие меши (ограничение ~300 вершин)

Недостатки:

  • не работает с разными scale

  • не работает с GPU instancing


3. Texture Atlases

Объединение множества текстур в один atlas.

Зачем:

  • чтобы разные объекты могли использовать один материал

Проблемы:

  • bleeding

  • сложно обновлять atlass’ы


4. GPU Instancing

Определение: Рендер множества одинаковых объектов одной командой.

Пример:

  • трава

  • деревья

  • войска на поле

Преимущества:

  • тысячи объектов → несколько draw calls

Требования:

  • одинаковый материал

  • instancing-enabled


5. SRP Batcher (URP, HDRP)

Фреймворк для ускорения SetPass вызовов.

Преимущества:

  • радикально снижает CPU нагрузку

  • даже разные материалы могут быть в одном проходе


6. Mesh Combine

Ручная сборка нескольких объектов в один меш.

Преимущества:

  • полный контроль

Недостатки:

  • сложно обновлять

  • нельзя использовать для анимированных объектов


7. UI оптимизация

  • Canvas splitting

  • избегать частых rebuild

  • не создавать тысячи UI элементов


Практические рекомендации

Лучшее для статичных сцен:

  • Static batching

  • Texture atlases

  • Mesh combine

Лучшее для динамических сцен:

  • GPU Instancing

  • SRP Batcher

  • оптимизация материалов

Худшее, что можно сделать:

  • много материалов

  • много разных шейдеров

  • отключить batching

  • использовать много прозрачных объектов


Краткий вывод

Draw call — это команда на рендер объекта. Чтобы уменьшить их количество, объединяют материалы, используют batching, instancing, atlases и SRP Batcher.

  • Аватар

    Unity Guru

    Oleg Miroshkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • Unity

    Unity

Ключевые слова

#draw

#call

Подпишись на Game Developer в телеграм

  • Аватар

    Unity Guru

    Oleg Miroshkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.