Communitygithub.com

Pingwink/skill

用于通过Python自动化Blender、配置高性能Cycles GPU渲染(OptiX、降噪、Fast GI)、解决Blender 5.2+ API变更(合成节点组、media_type VIDEO)以及将动画渲染为MP4/H.264的技能。

skill 是什么?

该技能(Pingwink/skill)为开发者和AI代理提供了在Blender 5.2+环境中进行高效自动化、优化渲染和处理视频工作流的完整指南。它涵盖了两种关键通信架构:通过Socket IPC(端口9876)进行交互式会话控制,以及用于后台无头渲染的CLI命令行,可避免GUI冻结并提升15-20%的渲染速度。技能核心针对Blender 5.2的API变化提供了解决方案,例如正确设置`media_type`为`'VIDEO'`以导出FFMPEG/MP4,以及使用新的`compositing_node_group`替代旧的`scene.node_tree`进行合成。此外,还包含一套经过实战检验的Cycles GPU极致优化配置,通过结合OptiX光线追踪、AI降噪(10-12个样本)、Fast GI和智能光线反弹限制,可将渲染时间从每帧56秒缩短至约3秒。最后,技能还提供了有机眼睑变形和程序化烟雾粒子等建模与动画模式,以及一个完整的预渲染验证流程。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Pingwink/skill/tree/HEAD/skills/blender-cycles-video-workflow

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Blender 5.2 自动化、Cycles 优化与视频工作流

本指南(技能)包含在 Blender 5.2 中进行建模、动画和场景渲染时经过验证的程序、优化配置和代码模式。


1. 通信与渲染架构

A. 交互式会话控制 (Socket IPC)

对于交互式建模、材质修改和测试帧,请使用 socket 客户端:

  • 端口: 127.0.0.1:9876 (Blender MCP 插件 / socket 桥接)
  • 协议: 以 null 字节 \0 结尾的 JSON ({"type": "execute", "code": "...", "strict_json": true})

B. 后台动画渲染 (Headless CLI)

原则: 不要通过 socket 渲染长动画(可能导致 GUI 挂起或超时)。 将场景保存为 .blend 文件,然后在后台启动一个专用的 CLI 进程:

& "C:\Program Files\Blender Foundation\Blender 5.2\blender.exe" -b "path\to\project.blend" -s 1 -e 108 -a
  • 优势: 渲染速度提升 15–20%(无 OpenGL/视口开销),逐帧进度流式输出到 stdout,不会阻塞界面。

2. Blender 5.2+ 中的关键 API 变更

A. 导出视频到 FFMPEG / MP4

在 Blender 5.2 中,直接将 file_format = 'FFMPEG' 分配给默认设置会导致 TypeError。需要先设置 media_type:

import bpy

scene = bpy.context.scene
ims = scene.render.image_settings

# 1. 在 Blender 5.2 中,选择视频格式前需要设置:
ims.media_type = 'VIDEO'
ims.file_format = 'FFMPEG'

# 2. 配置容器和编解码器:
scene.render.ffmpeg.format = 'MPEG4'
scene.render.ffmpeg.codec = 'H264'
scene.render.ffmpeg.constant_rate_factor = 'HIGH'
scene.render.ffmpeg.ffmpeg_preset = 'REALTIME' # 选项:'BEST'、'GOOD'、'REALTIME'

B. 合成器 (Compositing Node Group)

Blender 5.2 引入了 compositing_node_group 来替代旧的 scene.node_tree,以及 NodeGroupOutput 来替代 CompositorNodeComposite:

scene = bpy.context.scene
scene.use_nodes = True

ng = scene.compositing_node_group
if not ng:
    ng = bpy.data.node_groups.new(name="Compositing", type='CompositorNodeTree')
    scene.compositing_node_group = ng

# 创建输入/输出
rl = ng.nodes.new('CompositorNodeRLayers')
glare = ng.nodes.new('CompositorNodeGlare')
out = ng.nodes.new('NodeGroupOutput')

# 在 Blender 5.2 中,Glare 参数是 socket,而不是对象属性:
glare.inputs['Type'].default_value = 'Fog Glow'
glare.inputs['Threshold'].default_value = 0.55
glare.inputs['Size'].default_value = 7.0
glare.inputs['Strength'].default_value = 0.8

3. Cycles 极致优化(GPU 渲染速度提升 16 倍)

在保持工作室级别质量的同时,将每帧渲染时间从约 56 秒减少到约 3 秒的配置:

import bpy

scene = bpy.context.scene
scene.render.engine = 'CYCLES'

# 1. OptiX 光线追踪和 GPU 设置
cpref = bpy.context.preferences.addons['cycles'].preferences
cpref.compute_device_type = 'OPTIX'
cpref.get_devices()

# 仅激活 NVIDIA 显卡(关闭速度较慢的 CPU)
for device in cpref.devices:
    if device.type == 'OPTIX' and 'GeForce' in device.name:
        device.use = True
    else:
        device.use = False

cycles = scene.cycles
cycles.device = 'GPU'

# 2. 基于 AI 降噪的智能采样
cycles.samples = 10                  # 使用 OptiX 降噪器时,10-12 个样本就足够了!
cycles.use_denoising = True
cycles.denoiser = 'OPTIX'

# 3. Fast GI 和光线反弹限制
cycles.use_fast_gi = True
cycles.max_bounces = 4
cycles.diffuse_bounces = 2
cycles.glossy_bounces = 2
cycles.transmission_bounces = 2
cycles.volume_bounces = 1
cycles.transparent_max_bounces = 4
cycles.caustics_reflective = False
cycles.caustics_refractive = False

# 4. 在帧之间重用几何体数据
scene.render.use_persistent_data = True

4. 建模和动画模式

A. 有机眼睑(形态键 + 二次曲线轮廓)

  • 将上眼睑边缘向下变形,同时保持眼睛的椭圆形状: closed_z = -h_bot * math.sqrt(max(0.0, 1.0 - (x / w_eye)**2))
  • 同时动画化皮肤褶皱 (crease) 以及闭眼时眼球的细微向下旋转,以获得疲倦、自然的表情。
  • 使用具有 EASE_IN_OUT 的 BEZIER 插值,以实现眼睑运动的平滑加速和减速。

B. 程序化烟雾和漩涡粒子

  • 使用 bmesh 创建螺旋带: radius = r_base + delta * t,spiral_angle = base_angle + t * turns * pi。
  • 使用基于 ShaderNodeTexNoise 并通过 ColorRamp 混合的透明 Principled BSDF 材质。
  • 使用 interpolation = 'LINEAR' 循环旋转(从 0° 到 360° 的倍数),使粒子运动均匀且可重复。

5. 全帧渲染前的验证流程

  1. 始终渲染 1 个测试帧(对象打开)和 1 个测试帧(对象关闭/最大程度变形)。
  2. 测量单帧的执行时间: 动画时长 = 帧数 * 单帧时间
  3. 测试一个短的 CLI 渲染(2 帧:-s 1 -e 2 -a),以验证视频文件的正确写入。

相关技能