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
⚠️ Внимание: модель 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 позволяет сохранить общую геометрию, но дать модели свободу в деталях на финальных шагах. Это полезно, когда карта «пережимает» текстуры.
Типичные проблемы и их решения
Самая частая жалоба — результат «игнорирует» карту глубины. Проверьте по порядку: включён ли блок 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.