Animación de Cámara con Zoom Lento
La cámara se acerca lentamente desde un plano general de establecimiento hasta un primer plano cerrado sobre un detalle heroico (logo, textura, característica). Incluye un sutil zoom dolly (cambio de distancia focal) para compresión cinematográfica.
Cuándo Usarlo
- El usuario quiere un "revelado" o "toma heroica"
- El usuario dice "zoom in", "push in", "close-up del logo", "revelado cinematográfico"
- Destacar un detalle o característica específica del producto
Requisitos Previos
- Blender MCP: Conectado
- Modelo 3D: Ya importado en la escena de Blender
- Carpeta de salida:
~/Desktop/Blender Videos/ - ffmpeg: Instalado
Parámetros
| Parámetro | Valor por Defecto | Descripción |
|---|---|---|
duration | 5 | Duración del video en segundos |
fps | 24 | Fotogramas por segundo |
start_distance | 4.0 | Distancia inicial de la cámara |
end_distance | 1.8 | Distancia final de la cámara (primer plano) |
start_height | 3.0 | Altura inicial de la cámara |
end_height | 1.2 | Altura final de la cámara |
start_lens | 35 | Distancia focal inicial (angular) |
end_lens | 65 | Distancia focal final (teleobjetivo) |
focus_point | (0,0,0.1) | Punto hacia el cual hacer zoom (ej. centro del logo) |
transparent_bg | true | Fondo transparente |
Flujo
Paso 1: Identificar el Punto de Enfoque
Pregunta al usuario en qué detalle hacer zoom, o usa el centro del objeto por defecto. Usa AskUserQuestion si no está claro.
Paso 2: Configurar la Cámara
import bpy, math
# Objetivo de enfoque
bpy.ops.object.empty_add(type='PLAIN_AXES', location=FOCUS_POINT)
tgt = bpy.context.active_object
tgt.name = 'ZoomTarget'
# Cámara
bpy.ops.object.camera_add(location=(START_X, -START_DISTANCE, START_HEIGHT))
cam = bpy.context.active_object
cam.name = 'SlowZoomCam'
cam.data.lens = START_LENS
track = cam.constraints.new(type='TRACK_TO')
track.target = tgt
track.track_axis = 'TRACK_NEGATIVE_Z'
track.up_axis = 'UP_Y'
bpy.context.scene.camera = cam
Paso 3: Animar el Push-In
import bpy
TOTAL_FRAMES = DURATION * FPS
scene = bpy.context.scene
scene.frame_start = 1
scene.frame_end = TOTAL_FRAMES
scene.render.fps = FPS
# Inicio angular
cam.location = (1.5, -START_DISTANCE, START_HEIGHT)
cam.keyframe_insert(data_path='location', frame=1)
cam.data.lens = START_LENS
cam.data.keyframe_insert(data_path='lens', frame=1)
# Final cerrado
cam.location = (0.3, -END_DISTANCE, END_HEIGHT)
cam.keyframe_insert(data_path='location', frame=TOTAL_FRAMES)
cam.data.lens = END_LENS
cam.data.keyframe_insert(data_path='lens', frame=TOTAL_FRAMES)
# Mantener interpolación BEZIER por defecto para entrada/salida suave
Paso 4: Iluminación + Render
Usa la misma configuración de iluminación "golden hour" de la habilidad de plataforma giratoria. Renderiza como secuencia PNG con Cycles, codifica con ffmpeg a ProRes 4444.
ffmpeg -y -framerate 24 \
-i "~/Desktop/Blender Videos/slowzoom_frames/%04d.png" \
-c:v prores_ks -profile:v 4444 -pix_fmt yuva444p10le \
"~/Desktop/Blender Videos/slow_zoom.mov"
Consejos
- El cambio de distancia focal (35mm a 65mm) crea un sutil efecto de zoom dolly / Hitchcock
- La interpolación BEZIER proporciona una entrada/salida suave — no uses LINEAR para esta animación
- Desplaza ligeramente la posición inicial en el eje X (ej. 1.5) para un enfoque diagonal más cinematográfico