Un plano, una esfera y un puñado de cubos se convierten en un faro sobre una isla entre dos acantilados. Esta guía va de principio a fin: un bloqueo básico en Blender, un pase de profundidad, una imagen fotorrealista de Stable Diffusion con un ControlNet de profundidad y luego una proyección de cámara que devuelve el render a las formas 3D para que la cámara pueda moverse. Está dirigida a quienes son nuevos en Stable Diffusion.
Lo que me gusta de este proceso es que controlas la composición final. Como artista profesional, siempre he tenido más ideas que tiempo para realizarlas. Este enfoque me permite probar muchas de ellas con un esfuerzo relativamente pequeño.
En resumen
- Bloqueo: un plano para el mar, una UV sphere para la isla, cubos para los acantilados y el faro. Cámara de 33 mm.
- Pase de profundidad: pase Z → Map Range → Invert Color; view transform Raw; PNG de 16 bits.
- Stable Diffusion: AUTOMATIC1111 con epiCPhotoGasm y la extensión ControlNet: Depth, preprocesador depth_zoe, peso 0,75.
- Proyección: UV Project from View, un shader Background, mucha subdivisión.
- Archivos del proyecto: la escena de Blender es gratuita en Gumroad.
Este vídeo usó AUTOMATIC1111. Para la misma idea en ComfyUI, en directo mientras mueves la cámara, mira concept art en tiempo real con Blender y Stable Diffusion.
1. Bloquea la escena en Blender 4.3
La interfaz de Blender 4.3 difiere un poco de la de versiones anteriores. Todo aquí es lo más básico posible.
- Mar: Shift+A → Mesh → Plane. Muévelo con G, escálalo con S para hacerlo mucho más grande.
- Isla: una UV Sphere, hundida en el plano y con Shade Smooth.
- Faro: un cubo, escalado en vertical. Añade un par de edificios pequeños, de forma esporádica, no demasiados.
- Acantilados: más cubos, duplicados (Shift+D), inclinados y escalados.
Añade una cámara. Arrastra un segundo viewport hacia abajo, ponlo en la vista de cámara (View → Cameras → Set Active Object as Camera) y activa Lock Camera to View para poder navegar sin perder la cámara. Usé una distancia focal de 33 mm, ligeramente ancha para una vista de paisaje.
Después coloca los acantilados alrededor de la isla para enmarcar una abertura, con una pequeña isla en el medio: un faro, un castillo o una torre de ciencia ficción. Aquí paso la mayor parte del tiempo, moviendo y escalando rocas. Quiero un gran contraste entre formas grandes y pequeñas, y que la mirada se dirija al sujeto principal. Esta composición es sencilla: el sujeto va justo en el medio.
Cielo: duplica el plano y gíralo en vertical con R (mantén Ctrl para ajustar). Mantenlo no demasiado lejos; un plano muy distante puede alterar los valores de profundidad.
En Output Properties, baja la resolución al 50 % para que Stable Diffusion funcione más rápido.
2. Renderiza un pase de profundidad
En un pase de profundidad, los píxeles blancos están cerca y los negros lejos.
- View Layer Properties → Passes, activa Z.
- Cambia al espacio de trabajo Compositing y haz clic en Use Nodes.
- Renderiza una vez. Las luces de la escena no afectan al pase de profundidad, así que basta con una luz sencilla.
- Añade un nodo Viewer y conecta la salida Depth del render. Al principio está sobreexpuesta.
- Inserta Map Range entre ellos y arrastra sus valores hasta que el degradado se vea bien. Yo simplemente movía los deslizadores a izquierda y derecha hasta encontrar el aspecto que quería.
- Añade Invert Color; el pase no funciona como debe del revés.
- Render Properties → Color Management → View Transform: Raw. Da un rango más suave y mejor definido.
- Conecta Invert Color al nodo Composite, renderiza y guarda como PNG, profundidad de color de 16 bits, compresión del 0 %. 16 bits da una imagen más rica.
3. Instala Stable Diffusion y ControlNet
La instalación más sencilla de AUTOMATIC1111 es la versión v1.0.0-pre: descarga solo sd.webui.zip, descomprímelo y ejecuta run.bat. Tarda un minuto o más en descargar los paquetes adicionales; dale tiempo.
- Los modelos van en la carpeta de modelos de Stable Diffusion. Encontré los míos en Civitai; el que más usé es epiCPhotoGasm, genial para imágenes realistas. Busca en Civitai otros estilos y ponlos en la misma carpeta.
- Extensión ControlNet: en la interfaz web, Extensions → Install from URL, pega
https://github.com/Mikubill/sd-webui-controlnete instala. Luego Installed → Check for updates → Apply and restart UI. - Modelos ControlNet: descarga desde lllyasviel/ControlNet-v1-1 en Hugging Face a la carpeta de modelos de la extensión. Yo uso sobre todo depth; también descargué canny (detección de líneas), pero esta guía solo usa depth.
ControlNet se describe en Adding Conditional Control to Text-to-Image Diffusion Models (Zhang et al., 2023).
4. Genera la imagen
En la pestaña txt2img:
- Checkpoint: epiCPhotoGasm.
- Ancho × alto: 960 × 540, igual que el render.
- Seed 10, fija, porque no quiero variación mientras ajusto.
- ControlNet: abre el panel, haz clic en Depth y marca Enable. Fija el preprocesador en depth_zoe, que es mucho mejor que el depth_midas por defecto. Arrastra el PNG de profundidad.
- Control weight: empieza en 0,7. Los valores más bajos añaden variación (con 0,2 el resultado es muy distinto de tu escena) y 1,0 también la rompe. Mantente entre 0,5 y 0,9.
El prompt es simplemente lo que veo: «canyon, lighthouse, small island, sea, sunny day, limestone». Cambia «limestone» por un país, como Ireland, y obtienes un paisaje completamente distinto.
Un halo alrededor de una forma suele venir del peso del ControlNet. Bajarlo a 0,6 quitó parte del halo pero causó fallos. 0,75 fue justo lo que hacía falta; con 0,8 añadió una playa delante.
Hires. fix duplica la resolución. Según tu VRAM, puede funcionar o fallar; suele tardar un par de minutos, y a veces tengo que reiniciar el ordenador para conseguir una ejecución limpia. La versión de 2K tiene mucha más calidad, pero los detalles cambian respecto a la de 1K. Todavía no sé cómo mantenerlo coherente; si lo sabes, deja un comentario en el vídeo.
Todo se guarda automáticamente en la carpeta outputs de la interfaz web, una galería interminable de tus intentos.
Qué salió mal por el camino
- El peso 1,0 rompió la imagen. Hacia 0,5 empezaba a mezclarse.
- Depth Midas produjo algo completamente distinto, sin relación con la isla.
- Un degradado de profundidad débil creó una playa delante, o fundió los objetos del plano medio con el primer plano. Usa el view transform Raw y un buen Map Range.
- Fondos recargados: tuve que cambiar prompts, y mover la isla y detalles en Blender, para conseguir un fondo limpio.
Una vez que tuve depth_zoe y un buen peso, empezaron las buenas imágenes. También probé un castillo medieval sombrío, países como Jordania y Yemen, y un castillo futurista, que dio un aspecto bastante moderno. Las rocas del primer plano ahí son mis cubos; sigue muy bien el bloqueo.
5. Proyecta el render de vuelta sobre la escena
- Selecciona todos los objetos excepto la cámara y las luces, pulsa Tab y A para seleccionarlo todo.
- UV → Project from View, desde la cámara.
- Dale a un objeto un material nuevo y cámbialo de Principled BSDF a un shader Background: no hay reflejos, es una proyección plana de la textura.
- En el espacio de trabajo Shading, añade un Image Texture con el render de Stable Diffusion y conéctalo.
- Selecciona todo lo visible, luego el objeto con textura el último, y pulsa Ctrl+L → Link Materials.
Al principio la proyección se ve mal. Subdivide las mallas (no la esfera, que ya es suficientemente densa, sino los acantilados, el cielo y el agua): en Edit Mode, Subdivide varias veces, y luego Project from View otra vez. Tuve que subdividir una vez más antes de que todo se viera bien. Ahora, al mover la cámara, se lee como una escena 3D.
Arregla lo que le falta al bloqueo
- La parte superior del faro: el cubo no llegaba hasta ahí. Shift+clic derecho para colocar el cursor 3D, añade un cilindro, escálalo y estréchalo para llenar el espacio, dale el material Background y vuelve a hacer Project from View. Hice lo mismo con la palmera con una esfera provisional. Más tarde dividí la parte superior en cilindros para eliminar un halo.
- El cielo: en Photoshop hice un degradado limpio a partir del cielo del render. Hacer clic en el contador de usuarios del material (17) crea una copia de usuario único, y ahí cambié la imagen por la nueva.
- Los bordes de las rocas se notan cuando la cámara se mueve. Mover las rocas un poco hacia atrás hace que el recorte sea mucho menos visible en un movimiento pequeño.
6. Agua y movimiento de cámara
En el plano del mar, sustituye el material por un nuevo Principled BSDF con roughness 0. Refleja el HDRI, así que activa el ray tracing en Render Properties (funciona un poco distinto en 4.3) para obtener un reflejo especular de la escena.
Después añade ondulaciones: Noise Texture → Bump (el color a Height, Normal al Normal del shader), con Texture Coordinate y Mapping delante. Pon un fotograma clave en la location de Mapping en el fotograma 1, muévela en el 250 y vuelve a poner un fotograma clave. El primer intento fue demasiado rápido; bajé el movimiento a 0,1 m para una animación sutil.
Antes de renderizar:
- Sube las muestras del viewport a 256.
- Cambia el view transform de Raw de vuelta a Standard, conecta la Image del render (no la profundidad) al nodo Composite y vuelve a poner la resolución al 100 %.
- Hunde unas cuantas rocas en el agua y trae el agua al primer plano.
- Pon un fotograma clave en la cámara en el fotograma 1, acércala ligeramente en el 150, pon otro fotograma clave y pulsa Render Animation a tu carpeta de salida. Yo rendericé un archivo de vídeo para que fuera más rápido.
Después probé otros prompts, como Groenlandia y Tailandia, y sustituí la textura en la carpeta para obtener nuevas versiones de la misma escena. La escena de Blender es gratuita en mi Gumroad.
Ver la versión en vídeo (23:27)
Todo lo anterior también está en el vídeo, si prefieres seguirlo en pantalla. El vídeo está en inglés.
Preguntas frecuentes
¿Cómo exporto un mapa de profundidad desde Blender para ControlNet?
Activa el pase Z en las propiedades de View Layer y, en el Compositor, pasa Depth por Map Range e Invert Color para que lo cercano sea blanco y lo lejano negro. Fija el view transform en Raw y guarda como PNG de 16 bits sin compresión.
¿Qué peso de ControlNet debo usar con un mapa de profundidad?
Entre 0,5 y 0,9. Con 1,0 rompió la imagen; con 0,6 produjo fallos; 0,75 fue justo lo que hacía falta, mientras que 0,8 añadía una playa delante.
¿Depth Zoe o Depth Midas?
Depth Zoe. Con Midas el resultado no tenía nada que ver con la isla.
¿Por qué los objetos del plano medio se funden con el primer plano?
El mapa de profundidad no tiene suficiente variación en sus degradados. Fija el view transform en Raw y ajusta Map Range para un degradado bueno y uniforme.
