Pipeline de Ejecución
Paso 1
Render Engine
Cycles + GPU
Paso 2
Resolución
2000×2000 RGBA
Paso 3
Iluminación
3-Point + HDRI
Paso 4
Materiales PBR
Principled BSDF
Paso 5
Batch Cameras
4 ángulos
Paso 6
Turntable MP4
36 frames → ffmpeg
4
Cámaras de Producto
40
Imágenes Totales
~4m
Tiempo por Frame
RTX 4090
GPU de Renderizado
Configuración de Render
nutripaw_calmpaw.blend
Motor
CYCLES
Dispositivo
GPU / CUDA
Muestras
256
Denoising
OIDN ✓
Resolución
2000×2000
Color Mode
RGBA
Formato
PNG + JPEG
Fondo Transparente
film_transparent
Script Principal
nutripaw_render.py
🐍 nutripaw_render.py
import bpy, os, math
from mathutils import Vector
# ── Render Engine Setup ──────────────────
scene = bpy.context.scene
scene.render.engine = 'CYCLES'
cycles = scene.cycles
cycles.samples = 256
cycles.use_denoising = True
cycles.denoiser = 'OPENIMAGEDENOISE'
cycles.device = 'GPU'
prefs = bpy.context.preferences.addons['cycles'].preferences
prefs.compute_device_type = 'CUDA'
prefs.get_devices()
for dev in prefs.devices: dev.use = True
# ── Output Settings ──────────────────────
r = scene.render
r.resolution_x = r.resolution_y = 2000
r.image_settings.file_format = 'PNG'
r.image_settings.color_mode = 'RGBA'
r.film_transparent = True
# ── Materials PBR ────────────────────────
def pbr(name, color, metallic=0, roughness=0.5):
mat = bpy.data.materials.new(name)
mat.use_nodes = True
bsdf = mat.node_tree.nodes.get("Principled BSDF")
bsdf.inputs['Base Color'].default_value = (*color, 1)
bsdf.inputs['Metallic'].default_value = metallic
bsdf.inputs['Roughness'].default_value = roughness
return mat
bote = bpy.data.objects["Bote_CalmPaw"]
bote.data.materials[0] = pbr("Bote_Blanco",
(0.95,0.95,0.95), roughness=0.6)
bote.data.materials[1] = pbr("Tapa_Dorada",
(0.9,0.75,0.3), metallic=1.0, roughness=0.15)
# ── Batch Cameras ────────────────────────
OUTPUT = "/renders/nutripaw/"
os.makedirs(OUTPUT, exist_ok=True)
cameras = [o for o in bpy.data.objects if o.type=='CAMERA']
for cam in cameras:
scene.camera = cam
r.filepath = os.path.join(OUTPUT, f"{cam.name}.png")
bpy.ops.render.render(write_still=True)
Cámaras de Producto
4 shots
| Cámara | Ángulo | Focal | f-stop | Estado |
|---|---|---|---|---|
| cam_front | Frontal 0° | 50mm | f/2.8 | ✓ Done |
| cam_34 | 3/4 Vista 45° | 50mm | f/2.8 | ✓ Done |
| cam_side | Lateral 90° | 85mm | f/4.0 | ✓ Done |
| cam_top | Cenital 90°↓ | 35mm | f/8.0 | ⏳ Queue |
Setup de Iluminación 3-Point
HDRI + Area Lights
🫙
Key Light
800W
Fill Light
200W
Rim Light
400W
Key: Area 800W superior-izq
Fill: Area 200W lateral derecho
Rim: Area 400W trasero
HDRI: studio_small_03_4k.hdr
Materiales PBR — Principled BSDF
CalmPaw 150g
Bote_Blanco
Cuerpo principal · Plástico mate
Tapa_Dorada
Tapón metálico · Aluminio anodizado
Etiqueta_Verde
Etiqueta papel · Print PBR
Turntable 360° — 36 Frames
24fps → MP4
🫙
001
🫙
002
🫙
003
🫙
004
🫙
005
🫙
006
🫙
007
🫙
008
🫙
009
🫙
010
🫙
011
🫙
012
🫙
013
🫙
014
🫙
015
🫙
016
🫙
017
🫙
018
🫙
019
🫙
020
🫙
021
🫙
022
🫙
023
🫙
024
025
026
027
028
029
030
031
032
033
034
035
036
Progreso: 24/36 frames (66%)
$ ffmpeg -framerate 24 -i frame_%03d.png \
-c:v libx264 -pix_fmt yuv420p \
-crf 18 -preset slow \
turntable_final.mp4
Árbol de Salida
/renders/nutripaw/
📁
/renders/nutripaw/
┃
📄
nutripaw_render.py
4.2 KB
┃
📁
product_shots/
┃
┃ 🖼️
cam_front.png
8.4 MB
┃
┃ 🖼️
cam_34.png
8.1 MB
┃
┃ 🖼️
cam_side.png
7.9 MB
┃
┃ 🖼️
cam_top.png
⏳ pending
┃
📁
turntable/
┃
┃ 🖼️
frame_001.png … frame_024.png
~192 MB
┃
┃ 🎬
turntable_final.mp4
⏳ pending
Comando CLI (headless):
$ blender calmpaw.blend \
--background \
--python nutripaw_render.py
$ blender calmpaw.blend \
--background \
--render-frame 1..36 \
--render-output turntable/frame_