Карта глубины в Stable Diffusion: как работает и как настроить

ControlNet Depth отказывается сохранять перспективу исходного изображения чаще всего из-за неправильно выбранного препроцессора — например, когда вместо depth_zoe используется устаревший depth_midas, дающий грубую карту с «плоскими» объектами на переднем плане. Именно качество карты глубины определяет, насколько точно Stable Diffusion воспроизведёт объёмную структуру сцены при генерации.

Карта глубины — это монохромное изображение, где яркость пикселя кодирует удалённость объекта от камеры: светлые области ближе, тёмные дальше (или наоборот, в зависимости от инверсии). В экосистеме Stable Diffusion она используется как управляющий сигнал для ControlNet, позволяя генерировать новые изображения с сохранением геометрии исходника: интерьеров, поз, композиции кадра.

Что такое карта глубины и зачем она нужна в Stable Diffusion

По сути, карта глубины — это способ «объяснить» нейросети трёхмерную структуру сцены без 3D-моделирования. Вы загружаете референсное фото, препроцессор строит по нему градации удалённости, а ControlNet при генерации удерживает эту геометрию, даже если промпт полностью меняет стиль и содержимое кадра.

Типичные сценарии применения:

  • 🎨 Перерисовка интерьеров и архитектуры с сохранением перспективы и расположения предметов.
  • 🧍 Сохранение позы и композиции персонажа при смене стиля, одежды и фона.
  • 🖼️ Перенос композиции с референса на новую сцену без ручной расстановки объектов.
  • 🌄 Усиление ощущения объёма в пейзажах за счёт корректного распределения планов.

В отличие от Canny или OpenPose, которые фиксируют контуры и скелет, depth-контроль работает с пространством целиком. Это делает его основным инструментом там, где важна именно объёмная сцена, а не линии.

Препроцессоры карт глубины: Midas, ZoeDepth и LeReS

Препроцессор — это модель, которая анализирует исходное изображение и строит по нему карту глубины. В расширении sd-webui-controlnet для Automatic1111 и ComfyUI доступно несколько вариантов, и выбор между ними напрямую влияет на результат.

ZoeDepth (depth_zoe) — современный вариант, который обычно даёт более плавные градации и лучше различает объекты на среднем плане. MiDaS (depth_midas) — классический препроцессор, работает быстрее, но карта получается грубее. LeReS (depth_leres) имеет дополнительные параметры и иногда лучше справляется со сценами с выраженной перспективой.

ПрепроцессорСильные стороныСлабые стороны
depth_zoeПлавные переходы, точный средний планМедленнее, требовательнее к VRAM
depth_midasСкорость, стабильностьГрубая детализация, «плоские» объекты
depth_leresНастраиваемые параметры, перспективаТребует подбора настроек под сцену
depth_hand_refinerКоррекция кистей рук на картеУзкая специализация

Как включить Depth ControlNet в Automatic1111

Для работы понадобится установленное расширение sd-webui-controlnet и скачанная модель ControlNet для depth (для SD 1.5 это файл вида control_v11f1p_sd15_depth.pth, для SDXL — своя версия). Модель помещается в папку models/ControlNet внутри директории расширения или в общую папку моделей — точный путь зависит от вашей сборки, сверьтесь с документацией установленной версии.

Порядок действий в интерфейсе:

  • 📂 Разверните блок ControlNet под параметрами генерации и загрузите референсное изображение.
  • ✅ Отметьте галочку Enable (Включить).
  • ⚙️ В поле Preprocessor выберите depth_zoe, в поле Model — соответствующую depth-модель.
  • 🎚️ Запустите превью препроцессора (кнопка с иконкой взрыва/лупы), чтобы увидеть построенную карту до генерации.

☑️ Проверка перед генерацией с Depth

Выполнено: 0 / 5
⚠️ Внимание: модель ControlNet для SD 1.5 несовместима с чекпоинтами SDXL и наоборот. Если пара «препроцессор + модель» не соответствует базовой модели, генерация либо завершится ошибкой, либо карта глубины будет просто игнорироваться без явного предупреждения.

Ключевые параметры: Control Weight, Starting и Ending Step

За силу влияния карты глубины отвечает параметр Control Weight (вес управления). Значение по умолчанию — 1.0; его снижение даёт модели больше свободы отклоняться от геометрии референса, повышение делает следование карте жёстче. Универсального значения нет — подбирайте под задачу небольшими шагами.

Параметры Starting Control Step и Ending Control Step определяют, на каком участке сэмплирования действует ControlNet. Например, завершение контроля на отметке около 0.7–0.8 позволяет сохранить общую геометрию, но дать модели свободу в деталях на финальных шагах. Это полезно, когда карта «пережимает» текстуры.

📊 Какой препроцессор карт глубины вы используете чаще всего?
depth_zoe
depth_midas
depth_leres
Ещё не пробовал ControlNet

Типичные проблемы и их решения

Самая частая жалоба — результат «игнорирует» карту глубины. Проверьте по порядку: включён ли блок ControlNet, выбрана ли модель (а не только препроцессор), совпадает ли версия модели с чекпоинтом. Если превью карты чёрное или пустое — проблема в препроцессоре или в исходном изображении, например в слишком низком контрасте сцены.

Вторая типичная ситуация — «прилипание» мелких деталей референса: текстуры стен, узоры, шумы исходника проступают в новой генерации. Причина обычно в слишком высоком весе и полном диапазоне контроля. Снизьте Control Weight и ограничьте Ending Control Step.

⚠️ Внимание: при нехватке видеопамяти препроцессоры depth могут завершаться ошибкой CUDA out of memory. В этом случае включите режим низкого потребления VRAM в настройках ControlNet (Low VRAM) или уменьшите разрешение референса перед построением карты.
Как инвертировать карту глубины и зачем

Некоторые пайплайны ожидают карту, где ближние объекты тёмные, а не светлые. Если результат выглядит «вывернутым» — фон на переднем плане и наоборот — проверьте направление градации. В ComfyUI инверсия делается отдельной нодой (например, Invert Image), в Automatic1111 направление зависит от выбранного препроцессора и модели.

Карта глубины в ComfyUI

В ComfyUI логика та же, но реализована через ноды: загрузка изображения → нода препроцессора depth → нода Apply ControlNet с загруженной depth-моделью. Преимущество подхода — гибкость: карту можно отредактировать, размыть, скомбинировать с другими типами контроля перед подачей в сэмплер.

Комбинирование нескольких ControlNet — например, Depth + OpenPose — позволяет одновременно удерживать и пространство сцены, и позу персонажа. При этом суммарный вес контролей стоит держать умеренным, иначе генерация станет перегруженной артефактами.

FAQ: частые вопросы о картах глубины в Stable Diffusion

Чем карта глубины отличается от Canny?

Canny выделяет контуры объектов — плоские линии по границам. Карта глубины кодирует удалённость каждой точки сцены, сохраняя объём и перспективу. Для интерьеров и пейзажей depth обычно подходит лучше, для точного копирования линий рисунка — Canny.

Можно ли создать карту глубины вручную?

Да. Карту можно нарисовать или отредактировать в любом графическом редакторе: это обычное grayscale-изображение. Загрузите её в ControlNet, выбрав препроцессор none, чтобы изображение подалось в модель без повторной обработки.

Почему превью препроцессора показывает чёрный квадрат?

Возможные причины: не загружено исходное изображение, препроцессор не смог скачать свои веса при первом запуске (проверьте интернет-соединение и консоль на ошибки загрузки) или нехватка видеопамяти. Также убедитесь, что нажимаете именно кнопку превью рядом с выбором препроцессора.

Работает ли Depth ControlNet с SDXL?

Да, но только с моделями ControlNet, обученными специально под SDXL. Модели для SD 1.5 с SDXL-чекпоинтами несовместимы. Набор доступных препроцессоров при этом остаётся тем же.

Какое значение Control Weight выбрать для начала?

Начните со значения по умолчанию (1.0) и смотрите на результат. Если геометрия не совпадает с референсом — повышайте вес небольшими шагами. Если текстуры «зажаты» и появляются артефакты исходника — снижайте вес или ограничивайте Ending Control Step.