Если коротко:

Draw call передаёт GPU команду отрисовать геометрию с заданным состоянием. Сначала измерьте frame time на целевой гарнитуре и определите, ограничивает ли кадр CPU render thread или GPU. В Unity сопоставьте Draw Calls, Batches и SetPass Calls в Profiler, Rendering Statistics и Frame Debugger; в Unreal Engine используйте stat unit, stat RHI, stat SceneRendering и Unreal Insights. Сокращайте лишние смены материалов, применяйте batching или instancing там, где они не ухудшают culling. Универсального лимита нет.

VR draw calls optimization начинается с замера времени кадра, а не с чужого лимита. Один draw call сообщает GPU, какую геометрию и с каким состоянием нужно нарисовать. CPU подготавливает вызов, но итоговая скорость зависит также от shader cost, разрешения и overdraw.

Draw calls, batches и SetPass Calls

Draw Calls показывает команды отрисовки. Batches в Unity описывает группы работы, которые engine подготовил для отправки; конкретные счётчики зависят от render pipeline и версии. Эти числа близки по смыслу, но не обязаны совпадать.

SetPass Calls считает переключения shader pass и связанного render state. Сотня objects с одним material может дать меньше дорогих переключений, чем небольшая сцена с множеством материалов и проходов. Поэтому снижение SetPass иногда экономит CPU сильнее, чем удаление нескольких calls.

Шаг 1. Найдите CPU или GPU bottleneck

Сначала сравните CPU и GPU frame time на целевом device. Высокое время render thread при умеренном GPU time указывает, что подготовка команд может ограничивать кадр. Высокий GPU time требует анализа shaders, теней, fill rate и разрешения. Простое batching не исправит дорогой fragment shader.

Шаг 2. Измерьте сцену в Unity

  1. Запустите Development Build на гарнитуре, а не только Game view в editor.
  2. В Profiler откройте Rendering и сопоставьте batches, calls и CPU time.
  3. В Rendering Statistics проверьте SetPass Calls.
  4. Откройте Frame Debugger и найдите, какие objects, passes и materials создают повторные события.

Frame Debugger раскрывает структуру кадра, а Profiler показывает нагрузку во времени. Подключение устройства описано в гайде Unity VR Profiling.

Случайное free access video с обещанием speed up не заменяет capture вашей build. Разная сцена, graphics API и частота дисплея дают другой бюджет.

Шаг 3. Проверьте Unreal Engine

Команда stat unit показывает Game, Draw, GPU и RHIT. Если Draw или RHIT близки к общему Frame time, изучите render submission через stat RHI, stat SceneRendering и Unreal Insights. При высоком GPU time используйте GPU capture и ищите дорогие passes.

Профилируйте packaged build на устройстве. Editor меняет нагрузку. Запись CPU разобрана в материале об Unreal Insights, а проходы GPU в отдельном руководстве.

Шаг 4. Уберите причины лишних вызовов

Начните с повторяющихся состояний. Общий material и атлас либо texture array уменьшают переключения. Удалите лишние shader passes и проверьте, не создаёт ли один объект отдельный проход для тени, depth или transparency.

Для одинаковых meshes подходит GPU instancing. Static batching полезен неподвижной геометрии, но расходует память. Слишком крупный объединённый mesh ухудшает culling: engine рисует всю группу при видимом малом фрагменте.

SRP Batcher ускоряет подготовку совместимых материалов, но не обязан сокращать Draw Calls. В Unreal результат instancing также подтверждает profiler.

Почему нет универсального лимита

Одинаковое число calls имеет разную цену на PC и автономной гарнитуре. Её меняют graphics API, render state и свободное CPU time. GPU может оставаться bottleneck при малом счётчике.

Задайте бюджет в миллисекундах, соберите representative scene и измерьте её на устройстве. После изменения повторите capture: batching мог увеличить память или объём невидимой геометрии.

Короткий порядок действий

  • Зафиксируйте CPU, Draw/RHI и GPU time.
  • Сопоставьте Draw Calls, Batches и SetPass Calls.
  • Найдите повторные materials, passes и мелкие objects.
  • Примените instancing или подходящий batching.
  • Проверьте culling, память и итоговый frame time на гарнитуре.

Цель optimization состоит в освобождении времени кадра, а не в достижении красивого счётчика. Снижать calls имеет смысл, когда измерение подтверждает CPU-стоимость отправки команд.

Проверка по шагам

Короткий порядок действий

Выполнено 0 из 5

0 из 5
Поделиться:TelegramВКонтакте

Источники

  1. Unity: Introduction to optimizing draw calls
  2. Unity: Choose a method for optimizing draw calls
  3. Meta: Draw Call Cost Analysis for Meta Quest
  4. Epic Games: Performance Profiling and Configuration
  5. Epic Games: Stat Commands