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

Что такое Frame Debugger?

2.2 Middle🔥 111 комментариев
#Unity Core#Оптимизация

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

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

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

Что такое Frame Debugger в Unity?

Frame Debugger — это мощный инструмент профилирования и отладки в Unity, который позволяет разработчику пошагово анализировать процесс рендеринга каждого кадра. В отличие от общих профилировщиков, показывающих статистику по CPU/GPU, Frame Debugger предоставляет детализированную, последовательную "распаковку" того, как именно графический конвейер формирует конечное изображение на экране.

Основной принцип работы и назначение

Инструмент работает, "замораживая" рендеринг на выбранном кадре и позволяя вам перемещаться по списку всех событий рендеринга (draw calls) по одному. При каждом шаге на Game View отображается результат всех выполненных до этого момента операций. Это даёт бесценную возможность:

  • Визуально изолировать и понять вклад каждого отдельного draw call в итоговое изображение.
  • Точно идентифицировать источники проблем с производительностью, таких как избыточное количество draw calls, state changes (изменения состояний графического API) или неоптимальный порядок рендеринга.
  • Отлаживать материалы и шейдеры, видя, как каждый проход (pass) шейдера меняет буферы.
  • Анализировать работу собственных или пост-обработочных эффектов (post-processing).

Ключевые возможности и информация

Окно Frame Debugger разделено на две основные панели:

  1. Список событий (Events list) — это хронологический перечень всех команд, отправленных на GPU для текущего кадра. События группируются по типам:
    *   **Draw Mesh** / **Draw Mesh Skinned** / **Draw Mesh Instanced** — отрисовка мешей.
    *   **RenderTarget** — операции по смене или очистке Render Target (буфера для рисования, например, экрана или текстуры).
    *   **Clear** — очистка буфера цветом или глубиной.
    *   **Blit** — копирование или обработка текстуры (часто используется для пост-[обработки] или эффектов камеры).
    *   **ShadowMap** / **DepthMap** — события, связанные с рендерингом карт теней и глубины.

  1. Детальная информация (Details pane) — при выборе любого события в списке здесь отображается исчерпывающая техническая информация о нём:
    *   **Какой GameObject** и с каким **MeshRenderer** / **SkinnedMeshRenderer** был отрисован.
    *   Используемый **Material** и его настройки.
    *   **Shader**, который использовался для этого draw call, и значения всех его свойств (**Properties**).
    *   **Текстуры**, привязанные к материалу.
    *   Параметры вызова графического API.

Практический пример использования

Представим, что у вас внезапно упал FPS на сцене. Вы открываете Frame Debugger и видите список из 500+ draw calls. Прокручивая его, вы замечаете паттерн:

// В списке событий вы видите множество повторяющихся вызовов:
Draw Mesh: "Cube_Instance" | Material: "Standard"
Draw Mesh: "Cube_Instance" | Material: "Standard"
Draw Mesh: "Cube_Instance" | Material: "Standard"
// ... и так 100 раз для практически идентичных объектов.

Это явный признак того, что статические одинаковые объекты не объединены в батчи (batching). Инструмент сразу показывает причину: в деталях каждого события вы видите, что у материалов, несмотря на визуальную идентичность, разные экземпляры (different material instances), или объекты имеют разные трансформы, но не помечены как static для Static Batching.

Решение: Вы можете:

  • Пометить объекты как Static (если они неподвижны) для автоматического статического батчинга.
  • Использовать GPU Instancing для материалов, что объединит их в один draw call.
  • Вручную объединить меши в один (Mesh Combining).

Как открыть и использовать?

  1. В меню Unity выберите Window > Analysis > Frame Debugger.
  2. В открывшемся окне нажмите кнопку Enable.
  3. Воспроизведите сцену или дождитесь нужного кадра. Рендеринг остановится на первом событии.
  4. Используйте кнопки Next / Prev или кликайте по событиям в списке для пошаговой навигации.
  5. Для анализа производительности в реальном времени нажмите Pause в Game View и затем Enable в Frame Debugger.

Ограничения инструмента

  • "Замораживает" рендеринг, поэтому не подходит для отладки динамических процессов в реальном времени. Для этого нужен классический Profiler.
  • Может не показывать некоторые низкоуровневые операции, зависящие от графического API (DirectX, Vulkan, Metal).
  • Не предоставляет временных метрик в миллисекундах для каждого события. Для этого требуется связка с данными из GPU Profiler.

Итог: Frame Debugger — это незаменимый "рентген-аппарат" для графического программиста и технического художника в Unity. Он превращает абстрактные понятия вроде "много draw calls" в конкретные, визуально проверяемые события, позволяя проводить точечную и эффективную оптимизацию рендеринга.