De um blockout do Blender a um render final de IA com um ControlNet de profundidade, e de volta ao 3D

Monte uma cena de farol com cubos no Blender 4.3, renderize um passe de profundidade, transforme-o numa imagem fotorrealista com Stable Diffusion e um ControlNet de profundidade, e depois projete o render de volta na geometria para um movimento de câmera curto com água animada.

Anton Tenitsky13 de outubro de 20269 min de leituraVersão em vídeo abaixo

Este guia foi traduzido do inglês com IA e pode conter erros. Leia o original.

Um viewport do Blender mostrando um farol numa ilha rochosa entre dois penhascos de arenito, feito projetando um render de IA sobre uma geometria de blockout simples

Um plano, uma esfera e um punhado de cubos viram um farol numa ilha entre dois penhascos. Este guia vai do começo ao fim: um blockout básico no Blender, um passe de profundidade, uma imagem fotorrealista do Stable Diffusion com um ControlNet de profundidade e depois uma projeção de câmera que põe o render de volta nas formas 3D para a câmera poder se mover. É voltado a quem é novo no Stable Diffusion.

O que gosto neste processo é que você controla a composição final. Como artista profissional, sempre tive mais ideias do que tempo para realizá-las. Esta abordagem me permite testar muitas delas com um esforço bem pequeno.

Em resumo

  • Blockout: plano para o mar, UV sphere para a ilha, cubos para os penhascos e o farol. Câmera de 33 mm.
  • Passe de profundidade: passe Z → Map Range → Invert Color; view transform Raw; PNG de 16 bits.
  • Stable Diffusion: AUTOMATIC1111 com epiCPhotoGasm e a extensão ControlNet: Depth, preprocessor depth_zoe, peso 0,75.
  • Projeção: UV Project from View, um shader Background, bastante subdivisão.
  • Arquivos do projeto: a cena do Blender é gratuita no Gumroad.

Este vídeo usou o AUTOMATIC1111. Para a mesma ideia no ComfyUI, ao vivo enquanto você move a câmera, veja concept art em tempo real com Blender e Stable Diffusion.

1. Monte o blockout da cena no Blender 4.3

A interface do Blender 4.3 difere um pouco das versões anteriores. Tudo aqui é o mais básico possível.

  • Mar: Shift+A → Mesh → Plane. Mova com G, escale com S para deixá-lo bem maior.
  • Ilha: uma UV Sphere, afundada no plano e definida como Shade Smooth.
  • Farol: um cubo, escalado alto. Adicione algumas construções pequenas, esporádicas, não muitas.
  • Penhascos: mais cubos, duplicados (Shift+D), inclinados e escalados.

Adicione uma câmera. Arraste um segundo viewport para baixo, defina-o na vista da câmera (View → Cameras → Set Active Object as Camera) e ative Lock Camera to View para navegar sem perder a câmera. Usei uma distância focal de 33 mm, um pouco ampla para uma vista de paisagem.

O Blender com um blockout cinza de altos penhascos feitos de caixas e uma pequena ilha esférica com um farol de caixa, vistos pela câmera
A cena inteira: um plano, uma esfera e cubos.

Depois posicione os penhascos em volta da ilha para enquadrar uma abertura, com uma pequena ilha no meio: um farol, um castelo ou uma torre de ficção científica. Passo a maior parte do tempo aqui, movendo e escalando rochas. Quero grande contraste entre formas grandes e pequenas, e o olhar atraído para o assunto principal. Esta composição é simples: o assunto vai bem no meio.

Céu: duplique o plano e gire-o na vertical com R (segure Ctrl para encaixar). Mantenha-o não muito longe; um plano muito distante pode distorcer os valores de profundidade.

Em Output Properties, reduza a resolução para 50% para o Stable Diffusion rodar mais rápido.

2. Renderize um passe de profundidade

Num passe de profundidade, pixels brancos estão perto e pixels pretos estão longe.

  1. View Layer Properties → Passes, ative o Z.
  2. Mude para o workspace Compositing e clique em Use Nodes.
  3. Renderize uma vez. As luzes da cena não afetam o passe de profundidade, então uma luz simples basta.
  4. Adicione um nó Viewer e conecte a saída Depth do render. No começo a imagem fica estourada.
  5. Adicione o Map Range entre eles e arraste os valores From e To até o gradiente ficar certo. Eu só rolei os controles para a esquerda e a direita até achar o visual que queria.
  6. Adicione o Invert Color; o passe não funciona do lado certo como está.
  7. Render Properties → Color Management → View Transform: Raw. Dá uma faixa mais suave e mais bem definida.
  8. Conecte o Invert Color ao nó Composite, renderize e salve como PNG, profundidade de cor de 16 bits, 0% de compressão. 16 bits dá uma imagem mais rica.
O compositor do Blender com o Depth do Render Layers alimentando o Map Range (de -2 e 55 para 0,15 e 3) e o Invert Color, mostrando uma imagem de profundidade do cinza ao branco dos penhascos
Depth → Map Range → Invert Color. Perto é branco, longe é preto.

3. Instale o Stable Diffusion e o ControlNet

A instalação mais fácil do AUTOMATIC1111 é a versão v1.0.0-pre: baixe só o sd.webui.zip, descompacte e execute run.bat. Leva um minuto ou mais para baixar os pacotes extras; dê tempo.

  • Os modelos vão na pasta de modelos do Stable Diffusion. Achei os meus no Civitai; o que mais usei é o epiCPhotoGasm, ótimo para imagens realistas. Busque outros estilos no Civitai e coloque na mesma pasta.
  • Extensão ControlNet: na interface web, Extensions → Install from URL, cole https://github.com/Mikubill/sd-webui-controlnet e instale. Depois Installed → Check for updates → Apply and restart UI.
  • Modelos de ControlNet: baixe do lllyasviel/ControlNet-v1-1 no Hugging Face para a pasta de modelos da extensão. Uso sobretudo o depth; também baixei o canny (detecção de linhas), mas este guia só usa o depth.

O próprio ControlNet é descrito em Adding Conditional Control to Text-to-Image Diffusion Models (Zhang et al., 2023).

4. Gere a imagem

Na aba txt2img:

  • Checkpoint: epiCPhotoGasm.
  • Largura × altura: 960 × 540, combinando com o render.
  • Seed: 10, fixa, porque não quero variação enquanto ajusto.
  • ControlNet: abra o painel, clique em Depth e marque Enable. Defina o preprocessor como depth_zoe, que é bem melhor que o depth_midas padrão. Arraste o PNG de profundidade.
  • Control weight: comece em 0,7. Valores menores acrescentam variação (em 0,2 o resultado é muito diferente da sua cena) e 1,0 também quebra. Fique entre 0,5 e 0,9.

O prompt é só o que vejo: «canyon, lighthouse, small island, sea, sunny day, limestone». Troque «limestone» por um país, como Ireland, e você obtém uma paisagem completamente diferente.

O txt2img do AUTOMATIC1111 com o prompt canyon, lighthouse, small island, sea, sunny day, Ireland, 960 por 540, seed 10, uma unidade de ControlNet de profundidade e o resultado: um farol branco entre penhascos verdes
«Ireland» no prompt: penhascos verdes, um farol branco. Repare no halo à esquerda.

Um halo em volta de uma forma costuma vir do peso do ControlNet. Reduzi-lo para 0,6 removeu parte dele, mas causou falhas. 0,75 foi perfeito; em 0,8 acrescentou uma praia na frente.

O Hires. fix dobra a resolução. Dependendo da sua VRAM, pode rodar ou falhar; geralmente leva alguns minutos, e às vezes preciso reiniciar o computador para obter uma execução limpa. A versão 2K tem qualidade bem maior, mas os detalhes mudam em relação à de 1K. Ainda não sei como mantê-la consistente; se você sabe, deixe um comentário no vídeo.

Tudo é salvo automaticamente na pasta outputs da interface web, uma galeria sem fim das suas tentativas.

Um farol branco numa ilha rochosa entre dois altos penhascos de arenito num dia de sol
O render usado na projeção: penhascos de calcário, um dia de sol.

O que deu errado pelo caminho

  • Peso 1,0 quebrou a imagem. Em torno de 0,5 começou a se misturar.
  • Depth Midas produziu algo totalmente diferente, nada a ver com a ilha.
  • Um gradiente de profundidade fraco criou uma praia na frente, ou misturou objetos do plano médio com o primeiro plano. Use o view transform Raw e um bom Map Range.
  • Fundos carregados: tive que mudar prompts, e mover a ilha e detalhes no Blender, para obter um fundo limpo.

Quando tive o depth_zoe e um bom peso, as boas imagens começaram. Também testei um castelo medieval sombrio, países como Jordânia e Iêmen e um castelo futurista, que deu um visual bem moderno. As rochas do primeiro plano ali são os meus cubos; ele segue muito bem o blockout.

Uma torre de pedra clara e ruínas num cânion, com penhascos e um arco de rocha preenchendo todo o fundo
Uma tentativa inicial: o fundo se encheu de cânion em vez de céu.
Uma torre de concreto alta e moderna numa ilha verde entre paredes íngremes de cânion, com pedregulhos na água
Um castelo futurista: as rochas do primeiro plano são os cubos do blockout.

5. Projete o render de volta na cena

  1. Selecione todos os objetos exceto a câmera e as luzes, aperte Tab e A para selecionar tudo.
  2. UV → Project from View, a partir da câmera.
  3. Dê a um objeto um material novo e mude-o de Principled BSDF para um shader Background: não há reflexos, é uma projeção plana da textura.
  4. No workspace Shading, adicione um Image Texture com o render do Stable Diffusion e conecte.
  5. Selecione tudo o que está visível, depois o objeto texturizado por último, e aperte Ctrl+L → Link Materials.

No começo a projeção parece errada. Subdivida as malhas (não a esfera, que já é densa o bastante, mas os penhascos, o céu e a água): no Edit Mode, Subdivide várias vezes e depois Project from View de novo. Tive que subdividir mais uma vez antes de tudo ficar certo. Agora, quando você move a câmera, lê-se como uma cena 3D.

A vista da câmera do Blender mostrando o render de IA projetado sobre os cubos e a esfera, com o blockout visto de cima no viewport acima
O render projetado sobre a geometria. Da câmera, combina.

Corrija o que falta ao blockout

  • O topo do farol: o cubo não chegava até lá. Shift+botão direito para posicionar o cursor 3D, adicione um cilindro, escale-o e afunile-o para preencher o espaço, dê a ele o material Background e Project from View de novo. Fiz o mesmo para a palmeira com uma esfera provisória. Depois dividi o topo em cilindros para remover um halo.
  • O céu: no Photoshop fiz um gradiente limpo a partir do céu do render. Clicar na contagem de usuários do material (17) cria uma cópia de usuário único, e troquei ali a imagem pela nova.
  • As bordas das rochas aparecem quando a câmera se move. Afastar um pouco as rochas torna o corte bem menos visível para um movimento pequeno.

6. Água e o movimento de câmera

No plano do mar, troque o material por um novo Principled BSDF com roughness 0. Ele reflete o HDRI, então ative o ray tracing em Render Properties (funciona um pouco diferente no 4.3) para obter um reflexo de espelho da cena.

Depois acrescente ondulações: Noise Texture → Bump (cor em Height, Normal na Normal do shader), com Texture Coordinate e Mapping na frente. Crie um keyframe na location do Mapping no quadro 1, mova no quadro 250 e crie outro keyframe. A primeira tentativa foi rápida demais; reduzi o movimento para 0,1 m para uma animação sutil.

O editor de shaders do Blender com nós Texture Coordinate, Mapping, Noise Texture e Bump alimentando um Principled BSDF, acima de um viewport com água reflexiva
Ruído animado num nó bump dá à água as ondulações.

Antes de renderizar:

  • Aumente as amostras do viewport para 256.
  • Mude o view transform de Raw de volta para Standard, conecte a Image do render (não a profundidade) ao nó Composite e volte a resolução para 100%.
  • Afunde algumas rochas na água e traga a água para o primeiro plano.
  • Crie um keyframe na câmera no quadro 1, mova-a um pouco mais para perto no quadro 150, crie outro keyframe e Render Animation para a sua pasta de saída. Renderizei um arquivo de vídeo para ser mais rápido.
A cena do farol projetada com água plana e reflexiva em primeiro plano
A cena finalizada, pronta para um movimento de câmera curto.

Depois testei outros prompts, como Groenlândia e Tailândia, e substituí a textura na pasta para obter novas versões da mesma cena. A cena do Blender é gratuita no meu Gumroad.

Assista à versão em vídeo (23:27)

Tudo o que está acima também está no vídeo, se você preferir acompanhar na tela. O vídeo está em inglês.

Perguntas frequentes

Como exporto um mapa de profundidade do Blender para o ControlNet?

Ative o passe Z nas propriedades do View Layer e, no Compositor, passe o Depth por um Map Range e um Invert Color para perto ficar branco e longe ficar preto. Defina o view transform como Raw e salve como PNG de 16 bits sem compressão.

Que peso de ControlNet devo usar para um mapa de profundidade?

Entre 0,5 e 0,9. Em 1,0 a imagem quebrou; em 0,6 deu falhas; 0,75 foi perfeito, enquanto 0,8 acrescentou uma praia na frente.

Depth Zoe ou Depth Midas?

Depth Zoe. Com o Midas o resultado não tinha nada a ver com a ilha.

Por que meus objetos do plano médio se misturam com o primeiro plano?

O mapa de profundidade não tem variação suficiente nos gradientes. Defina o view transform como Raw e ajuste o Map Range para um gradiente bom e uniforme.

Anton Tenitsky é artista 3D com mais de 15 anos em computação gráfica, que trabalhou com Nickelodeon, Gameloft, Marvel Rivals e muitos outros clientes. Mais sobre mim

Guias relacionados