Communitygithub.com

Pingwink/skill

用於透過 Python 自動化 Blender、設定高效能 Cycles GPU 渲染(OptiX、降噪、Fast GI)、解決 Blender 5.2+ API 變更(合成節點群組、media_type VIDEO),以及將動畫渲染為 MP4/H.264。

skill 是什麼?

此技能專為需要在 Blender 5.2 以上版本中進行自動化建模、動畫與渲染的開發者與 AI 代理設計。它提供了兩套溝通架構:透過 Socket IPC(127.0.0.1:9876)進行互動式操作,以及透過 Headless CLI 執行背景動畫渲染,避免了 GUI 阻塞並提升 15–20% 的效能。技能詳細說明了 Blender 5.2 中的關鍵 API 變更,例如在匯出影片前必須先設定 `media_type = 'VIDEO'`,以及使用新的 `compositing_node_group` 與 `NodeGroupOutput` 來取代舊的節點樹。此外,它還提供了極致的 Cycles GPU 渲染優化配方,透過 OptiX 光線追蹤、AI 降噪(Denoiser)、Fast GI(快速全域照明)以及限制光線反彈次數等設定,可將單一影格的渲染時間從約 56 秒縮短至約 3 秒。技能中也包含了實用的建模與動畫模式,例如使用形狀鍵(Shape Keys)製作有機眼皮動畫,以及透過 bmesh 程式化產生煙霧與漩渦粒子,最後提供了完整的驗證流程,確保在執行完整渲染前確認設定無誤。

相容平台~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 bridge)
  • 通訊協定: 以空字元 \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 "路徑\到\專案.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 極致優化(16 倍 GPU 渲染加速)

以下配置可在維持工作室品質的同時,將每影格渲染時間從約 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 Denoiser 時,10-12 個樣本就足夠!
cycles.use_denoising = True
cycles.denoiser = 'OPTIX'

# 3. Fast GI 與光線反彈次數限制(Light Bounces)
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)進行動畫,並在閉眼時讓眼球輕微向下旋轉,以呈現疲憊、自然的表情。
  • 使用 BEZIER 插值搭配 EASE_IN_OUT,以實現流暢的加減速眨眼動作。

B. 程式化煙霧與漩渦粒子

  • 使用 bmesh 建立螺旋線條: radius = r_base + delta * t,spiral_angle = base_angle + t * turns * pi。
  • 使用 Principled BSDF 材質,並透過 ShaderNodeTexNoise 與 ColorRamp 混合來實現透明度效果。
  • 使用 interpolation = 'LINEAR' 循環旋轉(從 0 度到 360 度的倍數),使粒子運動穩定且可重複。

5. 完整渲染前的驗證流程

  1. 務必先渲染 1 個測試影格(處於開啟狀態的物體)和 1 個測試影格(處於閉合/最大變形狀態的物體)。
  2. 測量單一影格的執行時間: 動畫時間 = 影格數量 * 單一影格時間
  3. 測試一個簡短的 CLI 渲染(2 個影格:-s 1 -e 2 -a),以驗證影片檔案是否能正確寫入。

相關技能