← Назад к вопросам

Какие знаешь ограничения Static Batching?

2.0 Middle🔥 162 комментариев
#Оптимизация#Рендеринг и графика

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные ограничения Static Batching в Unity

Static Batching — мощный инструмент для оптимизации рендеринга статических объектов, но он имеет ряд важных ограничений, которые необходимо учитывать при разработке.

1. Ограничения по памяти

Наиболее критичное ограничение — увеличение потребления оперативной памяти (RAM) и видеопамяти (VRAM). При статической батчинге Unity создаёт в памяти один большой меш (combined mesh) для каждого материала в батче, дублируя вершины для всех объектов, даже если они используют один и тот же меш.

// Пример: 1000 одинаковых кубов с одним материалом
// Без батчинга: 1 меш в памяти, 1000 draw calls
// Со Static Batching: 1 combined mesh (все вершины 1000 кубов), 1 draw call, 
// но потребление памяти вершинными данными возрастает в 1000 раз!

Это особенно проблематично для:

  • Мобильных платформ с ограниченной памятью.
  • Сцен с тысячами повторяющихся объектов (заборы, травы, камни).

2. Ограничения на модификацию объектов

Статические объекты нельзя трансформировать во время выполнения:

  • Невозможно изменить положение, вращение или масштаб через transform.
  • Нельзя включать/выключать (SetActive) объекты без нарушения батчинга.
  • Любая анимация трансформации исключает объект из статического батчинга.
// Этот код сломает Static Batching для объекта:
void Update() {
    transform.position = Vector3.Sin(Time.time); // НЕ РАБОТАЕТ
    gameObject.SetActive(false); // ПРОБЛЕМАТИЧНО
}

3. Ограничения по материалам и шейдерам

  • Разные материалы создают разные батчи, даже для одинаковых мешей.
  • Изменения свойств материала (material.SetColor, material.mainTexture) требуют разделения батча.
  • Шейдеры с уникальными параметрами на объект часто несовместимы с батчингом.

4. Ограничения по количеству вершин

Существует аппаратное ограничение на количество вершин в одном батче:

  • 65 535 вершин на батч для 16-битных индексов (стандартное ограничение).
  • Можно увеличить до 4+ миллиардов через 32-битные индексы, но с поддержкой не на всех платформах.
// Unity автоматически разбивает батчи при превышении лимита,
// но это снижает эффективность оптимизации

5. Проблемы с освещением и лайтмаппингом

  • Статическое освещение требует дополнительных вершинных атрибутов (нормали, UV2 для лайтмапов).
  • Пересветка (lightmapping) должна быть завершена до батчинга.
  • Mixed Lighting может работать некорректно с некоторыми конфигурациями батчинга.

6. Ограничения при работе с префабами

  • Изменения в префабах не применяются к уже сбатченным объектам без перестройки.
  • Вложенные префабы могут создавать неожиданную фрагментацию батчей.
  • Разные инстанции префабов с разными материалами нарушают батчинг.

7. Проблемы производительности при построении

Процесс батчинга требует времени и ресурсов:

  • Происходит при запуске или при изменении статических объектов в редакторе.
  • На мобильных устройствах может вызывать просадки FPS при инициализации сцены.
  • Требует перестройки при любом изменении статической геометрии.

8. Ограничения платформы

  • Некоторые платформы (особенно старые мобильные GPU) имеют дополнительные ограничения.
  • WebGL может иметь специфичные лимиты по размеру батчей.
  • Консоли часто требуют особой настройки для эффективного батчинга.

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

Для минимизации проблем:

  1. Используйте Static Batching только для уникальных объектов, которые действительно не двигаются.
  2. Для повторяющихся объектов рассмотрите GPU Instancing как альтернативу.
  3. Контролируйте потребление памяти через профилировщик.
  4. Разделяйте объекты по слоям и материалам для оптимального батчинга.
  5. Тестируйте на целевых платформах — ограничения сильно различаются.

Итог: Static Batching — эффективный инструмент оптимизации, но требует взвешенного подхода. В современных проектах часто предпочтение отдаётся GPU Instancing или Dynamic Batching для сценариев, где ограничения статического батчинга становятся критичными.