Filme no Blender com Claude
O fluxo de trabalho por trás de um plano de 10 segundos de drone FPV noturno sobrevoando uma cidade: um storyboard, uma trajetória física real, um pivô (o primeiro herói não funcionou), iluminação noturna, som a partir do movimento, uma renderização de 3,5 horas e um revelador de acúmulo de argila. Cada etapa abaixo é um script em scripts/ que foi realmente executado para aquele plano; os nomes neles (Drone Empty, Street Asphalt, Building_1...) vêm daquela cena – renomeie para a sua.
0. Configuração
- Blender 4.4+ (feito na 5.2), uma GPU para Cycles, Python 3 +
ffmpegno PATH (+numpy,scipypara a etapa de som). - Ponte ao vivo (Claude dirige o Blender aberto, você observa): no Editor de Texto do Blender execute
tools/bridge.py(escuta em 127.0.0.1:9876). Depois, de um terminal:python tools/send.py scripts/06_night.pyoupython tools/send.py -c "print(bpy.data.filepath)". - Defina
FILM_ROOTpara sua pasta de projeto (padrão~/blender-film):scene/,render/,audio/,research/ficam lá.tools/lib.pyé carregado por todo script (auxiliares:coll(),save(),snap()...). - Trabalhe em cópias. Antes de reproduzir ou executar novamente qualquer script que edite materiais, copie o .blend – várias passadas não são idempotentes se uma execução falhar no meio (ao reexecutar, links de nós órfãos uma vez).
1. Storyboard primeiro
Peça ao Claude um storyboard de 10 segundos antes de tocar no Blender: lista de planos com tempos, câmera por plano, onde o herói está, o que o espectador sente. Transforme em uma folha de imagens (qualquer modelo de imagem) e mantenha-a aberta – toda decisão posterior é verificada em relação a ela.
2. Cidade
Use um pacote de assets de cidade que você possui (edifícios, estradas, adereços) ou assets CC0 gratuitos (Poly Haven). Peça ao Claude para organizar uma avenida + um cruzamento ao longo do eixo +X a partir de uma vista superior (mantenha o caminho do herói livre de adereços) e depois a decore: carros (estacionados / em movimento / parados), postes, árvores, hidrantes. Incorpore todo asset externo no .blend.
3. Movimento a partir da física, não curvas animadas manualmente
scripts/01_swing_sim.py simula o movimento (gravidade, arrasto do ar, uma corda que não estica, âncoras de teia do storyboard) e busca os tempos das âncoras até que a trajetória passe pela rua. 02_path_empty.py transforma isso em uma curva de trajetória + um empty no Follow Path com o offset keyframed por quadro (velocidade real, não linear). O herói é parenteado ao empty, a câmera segue sua própria trajetória (03_camera.py, + 03b_camera_noise.py para tremor sutil).
4. O herói – e quando pivotar
O primeiro herói era um Homem-Aranha rigged animado com clipes do Mixamo. Falhou: a captura de movimento é gravada no chão, então no ar ele pendia como um fantoche, as poses eram rígidas e ele era minúsculo no quadro. Se o personagem com membros parecer errado, troque o herói – mantenha a cidade, câmera e trajetória. Peça opções ao Claude (conseguimos: falcão, supercarro, correção manual, drone FPV).
O drone FPV funciona porque nada pode parecer rígido. 04_drone_attitude.py voa como um quadricóptero real:
- atitude a partir da física: eixo de impulso = aceleração + gravidade, nariz ao longo da velocidade -> inclina nas acelerações, inclina fortemente em curvas rápidas, levanta o nariz ao frear;
- corte de aceleração onde a trajetória é balística -> truques de estilo livre sobrepostos: power flip, barrel roll, back flip;
- frenagem com levantamento de nariz até pairar, depois um yaw lento para encarar a lente; hélices girando + tiras de LED ciano/magenta.
5. Passada de realismo (05_realism.py)
Aquelas pequenas coisas que ninguém nota até que faltem: exposição AgX (sem gradação), um volume de névoa fino, asfalto com repetição de textura quebrada, marcas de rodas, uma linha de gotejamento de óleo em cada pista, remendos, pintura desgastada e sujeira no pé de cada parede + faint run-off streaks.
6. Noite que parece noite (06_night.py)
Regra: à noite, o céu não ilumina a cena – as luzes práticas sim. Céu de gradiente escuro com brilho da cidade, postes LED, janelas iluminadas, faróis/lanternas de carros, sinais de trânsito vermelhos, nevoeiro azulado com um toque de emissão, asfalto molhado com poças.
- Primeira tentativa falhou (nevoeiro laranja em toda parte, blocos brilhantes em vez de janelas).
- A correção: as texturas da fachada já sabem onde está o vidro – vidro é liso, paredes são ásperas. Use o mapa de rugosidade como máscara de janela (
roughness < 0.3), depois ilumine um subconjunto aleatório por célula de janela: quente, frio, apagado.
7. Câmera como um operador real (07_shakify_cams.py)
Substitua o ruído processual pelo Shakify (add-on gratuito com movimento de câmera real gravado) em cada câmera de plano. Adicione planos fechados: uma câmera ao nível da rua ~0,45 m acima da estrada molhada, o drone mergulha na lente e para bem na frente dela. 08_lens_look.py: bloom ao redor das luzes, leve distorção de barril + dispersão – sem gradação de cor, o visual é a iluminação.
8. Som desenhado a partir do movimento
Gravações CC0 gratuitas (BigSoundBank: drone DJI, cidade à noite, tráfego em estrada molhada, buzinas, sirene distante, vento, chuva em uma poça, um ar-condicionado). 11_motion_data.py lê a animação por quadro (distância do drone / velocidade radial / lado / aceleração, carros próximos) em audio/motion.json; 12_build_sfx.py conduz a mixagem a partir disso:
- aceleração -> RPM do motor -> pitch; velocidade radial -> Doppler (pitch cai ao passar pela lente); lado -> pan de potência igual;
- ganho de distância + absorção de ar, rajadas de prop-wash em impulsos de aceleração, spray ao pairar baixo sobre a estrada molhada, o AC do telhado apenas no plano do telhado, passagens de carros em sua aproximação mais próxima, reverberação de canyon urbano;
- faça duas versões (noite calma / caos urbano total) e escolha ouvindo. Calma venceu: deixe o herói ser a estrela. Loudness -14 LUFS.
9. Renderização noturna – com segurança
09_render_opt.py: remova geometria duplicada oculta (o asset de árvore carregava cópias extras), use um LOD mais leve para qualquer coisa longe de cada câmera de plano, denoising por GPU. Sem mudança visível.- Renderize seis stills de teste na qualidade final primeiro e verifique-os.
10_render_edit.pyrenderiza apenas os quadros que a edição usa (lista de planos = câmera + intervalo de quadros), retomável, e escreverender/status.json;tools/render_window.ps1(Windows) mostra um painel de progresso limpo: %, tempo restante, último quadro finalizado.- Após a renderização: verifique se cada quadro existe, sem quadros pretos/quebrados (brilho por quadro, saltos apenas nos cortes planejados), som corresponde à mixagem aprovada, loudness pronto para YouTube. Só então codifique + (se você pediu) desligue o PC.
10. O revelador de acúmulo de argila (prova de que é 3D real)
13_aerial_cam.py adiciona uma câmera alta acima da avenida. Em uma cópia nova da cena, 14_clay_build.py transforma tudo em argila branca, congela a câmera + tráfego em um quadro, e esconde cada peça até sua vez, depois a solta do céu: carros primeiro, depois edifícios mais próximos da câmera primeiro, depois a cidade distante, depois postes e hidrantes (~500 peças). Cada queda acelera e quica um pouco ao pousar. tools/clay_assemble.sh: noite | corte seco | acúmulo de argila | one 0.25 s wipe | noite, mesma câmera, mesmo quadro. Stills divididos argila vs noite fazem ótimas miniaturas.
Lições que custaram tempo
- Gravadores de tela capturam preto se a especificação da janela estiver errada – verifique o primeiro quadro gravado antes de sair.
- Gravações da viewport: Material Preview precisa de motion blur desligado e volumes desvinculados ou ele borra; viewport do Cycles precisa de um denoiser.
- Caminhos de saída relativos em
blender -bresolvem para a raiz da unidade – sempre passe caminhos absolutos. - Pergunte antes de qualquer trabalho longo na GPU; teste primeiro em baixa qualidade, qualidade final por último.
Licença: MIT. Mantido exclusivamente por Abdullah Formuli. Nenhuma contribuição externa é aceita.