blender-rendering について
blender-renderingは、Blenderのレンダリングを設定・実行するスキルで、CyclesとEEVEEの手順を提供します。Python設定を使って、静止画、アニメーションのプレビュー、出力、レンダリング性能を調整する用途に向いています。
主な機能
- 01Cyclesの本番・ドラフトプリセット
- 02EEVEEの設定指針
- 03AgXまたはFilmicによる色管理
- 04静止画とアニメーションフレームの出力
- 05レンダリング性能とGPUの設定
活用シーン
- 01製品や建築の静止画レンダリング
- 02EEVEEでスタイライズドアニメーションをプレビュー
- 03アニメーションをPNG連番で出力
- 04設定調整によるレンダリング時間の短縮
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ roble3/ cc-blender-skill --skill blender-renderingインストール後、Claude Code で/blender-renderingを入力して読み込まれたか確認します。
同梱ファイルevals/evals.jsonreferences/overview.md
詳細
Blender レンダリング
効率よくレンダリングしましょう。本番環境ではデフォルト設定が適切ではありません。以下のレシピは、一般的なケースに合わせて調整されています。
エンジンの判断フローチャート
Need photoreal? Caustics? Accurate SSS? Glass-rich?
├── YES → Cycles (path tracer)
└── NO → Need speed? Stylized look? Animation iteration?
├── YES → EEVEE
└── NO → Cycles (default fallback for photoreal)
簡単なルール:
- 静止画、建築ビジュアライゼーション、製品、ヒーローショット → Cycles
- アニメーションのプレビュー、モーショングラフィックス、スタイライズされた表現 → EEVEE
参照画像の見た目に合わせる場合の引き継ぎ
一般的に魅力的なレンダリングを作るのではなく、元画像/参照画像に一致させることが目的の場合は、reference-look-calibrationを連鎖して読み込んでください。色相/彩度/明度、オブジェクトの範囲、グロー/オーラの色、変更前後の見た目の指標の測定を担当します。その後、このスキルで、調整済みの目標に沿って、指定されたマテリアル/ライティング/レンダリングの変更を適用してください。
レシピ
レシピ 1 — Cycles 本番用プリセット(256 サンプル+ノイズ除去)
import bpy
scene = bpy.context.scene
scene.render.engine = 'CYCLES'
scene.cycles.device = 'GPU'
# Sampling
scene.cycles.samples = 256
scene.cycles.use_adaptive_sampling = True
scene.cycles.adaptive_threshold = 0.01
scene.cycles.adaptive_min_samples = 32
# Denoising (recommended)
scene.cycles.use_denoising = True
scene.cycles.denoiser = 'OPENIMAGEDENOISE' # safe default; switch to 'OPTIX' on NVIDIA RTX
# Light paths (defaults are reasonable; bump transmission for glass-rich scenes)
scene.cycles.max_bounces = 12
scene.cycles.transmission_bounces = 12
# Resolution
scene.render.resolution_x = 1920
scene.render.resolution_y = 1080
scene.render.resolution_percentage = 100
print('render:cycles_production_preset')
レシピ 2 — Cycles 下書き用プリセット(反復作業を高速化)
import bpy
scene = bpy.context.scene
scene.render.engine = 'CYCLES'
scene.cycles.device = 'GPU'
scene.cycles.samples = 64
scene.cycles.use_adaptive_sampling = True
scene.cycles.adaptive_threshold = 0.05
scene.cycles.use_denoising = True
scene.render.resolution_percentage = 50 # half res for tests
print('render:cycles_draft')
レシピ 3 — EEVEE プリセット
import bpy
scene = bpy.context.scene
# Engine name changed across versions:
# Blender ≤ 4.1: 'BLENDER_EEVEE'
# Blender 4.2 only: 'BLENDER_EEVEE_NEXT' (transitional; replaced)
# Blender ≥ 5.0: 'BLENDER_EEVEE' (the new EEVEE replaced the old)
# Try the new name first; fall back if it doesn't exist on this Blender.
try:
scene.render.engine = 'BLENDER_EEVEE_NEXT'
except (TypeError, ValueError):
scene.render.engine = 'BLENDER_EEVEE'
# EEVEE settings (eevee namespace exists in 4.x and 5.x)
if hasattr(scene, 'eevee'):
scene.eevee.taa_render_samples = 64
scene.eevee.taa_samples = 16
scene.eevee.use_gtao = True # screen-space AO
scene.eevee.gtao_distance = 0.2
scene.eevee.use_bloom = True # glow
scene.eevee.use_ssr = True # screen-space reflections
scene.eevee.use_ssr_refraction = True # for glass
scene.eevee.use_volumetric_lights = True
scene.render.resolution_x = 1920
scene.render.resolution_y = 1080
print('render:eevee_preset')
把握しておきたい EEVEE の制限:
- 反射はスクリーンスペース方式です(画面外のものは反射できません)。回避策:Reflection Plane/Cubemap プローブを配置します
- 屈折も同様です
- 間接光はリアルタイムではなく、ベイクされます。正確なバウンスには Light Probe をベイクします
- 正確なコースティクスには対応していません
レシピ 4 — カラーマネジメント
import bpy
scene = bpy.context.scene
# View transform — controls the "look" mapping HDR → display
scene.view_settings.view_transform = 'AgX' # default Blender 4.x; replaces Filmic
scene.view_settings.look = 'AgX - Medium High Contrast'
# Or: 'Filmic' (older but still supported), 'Standard' (oversaturates highlights)
scene.view_settings.exposure = 0.0
scene.view_settings.gamma = 1.0
print('render:colormanagement_AgX')
ルール:写真出力に「Standard」は絶対に使わないでください。ハイライトが白飛びします。ほとんどの場合、AgX または Filmic を使用します。
レシピ 5 — 1 フレームを PNG にレンダリング
⚠ bpy.ops.render.render()は、scene.cameraが None の場合、Error: Cannot render, no cameraで失敗します。 必ず最初にカメラガードを実行してください。ガードは、シーンに CAMERA タイプのオブジェクトがあれば最初のオブジェクトを自動で割り当て、なければ明確なエラーを発生させます。
import bpy
scene = bpy.context.scene
# Camera guard — required before every render
def ensure_camera(scene):
if scene.camera is not None:
return scene.camera.name
cams = [o for o in bpy.data.objects if o.type == 'CAMERA']
if not cams:
raise RuntimeError("No camera in scene — add one before rendering")
scene.camera = cams[0]
return cams[0].name
cam_name = ensure_camera(scene)
print(f"camera:{cam_name}")
scene.render.image_settings.file_format = 'PNG'
scene.render.image_settings.color_mode = 'RGBA'
scene.render.image_settings.color_depth = '16' # 16-bit for compositing later
scene.render.filepath = '/tmp/output_hero.png'
bpy.ops.render.render(write_still=True)
print(f"render:saved {scene.render.filepath}")
この後、Bash で確認します:ls -la /tmp/output_hero.png — ファイルが存在することを確認し、サイズを報告してください。
レシピ 6 — アニメーションを PNG シーケンスとしてレンダリング
import bpy
scene = bpy.context.scene
# Camera guard — same pattern as Recipe 5
def ensure_camera(scene):
if scene.camera is not None:
return scene.camera.name
cams = [o for o in bpy.data.objects if o.type == 'CAMERA']
if not cams:
raise RuntimeError("No camera in scene — add one before rendering")
scene.camera = cams[0]
return cams[0].name
cam_name = ensure_camera(scene)
print(f"camera:{cam_name}")
scene.frame_start = 1
scene.frame_end = 240
scene.render.fps = 24
scene.render.image_settings.file_format = 'PNG'
scene.render.filepath = '/tmp/anim/frame_' # output: frame_0001.png, frame_0002.png, ...
# Resilience: keep partial work on crash
scene.render.use_placeholder = True
scene.render.use_overwrite = False
# Reuse mesh data between frames (faster)
scene.render.use_persistent_data = True
bpy.ops.render.render(animation=True)
print('render:animation_done')
プロの手順:PNG シーケンスにレンダリングしてから、後で ffmpeg を使って MP4 にエンコードします:
ffmpeg -framerate 24 -i frame_%04d.png -c:v libx264 -pix_fmt yuv420p -crf 18 anim.mp4
レシピ 7 — レンダリングが遅い場合のパフォーマンス調整
import bpy
scene = bpy.context.scene
# 1. Cap subdivision in render
scene.render.use_simplify = True
scene.render.simplify_subdivision = 1
scene.render.simplify_subdivision_render = 2
# 2. Higher noise threshold (faster, more denoiser-dependent)
scene.cycles.adaptive_threshold = 0.05
# 3. Lower light path bounces (lose some realism)
scene.cycles.max_bounces = 8
scene.cycles.diffuse_bounces = 3
scene.cycles.glossy_bounces = 3
print('render:performance_tuned')
レシピ 8 — GPU コンピュートデバイスの設定(初回のみ)
import bpy
prefs = bpy.context.preferences.addons['cycles'].preferences
prefs.compute_device_type = 'OPTIX' # or 'CUDA', 'HIP' (AMD), 'METAL' (Mac)
for device in prefs.devices:
device.use = True
print(f"gpu:{prefs.compute_device_type} devices:{len(prefs.devices)}")
これは Blender の設定です。マシンごとに一度だけ実行すれば十分です。
サンプル数の目安
| シーンの種類 | サンプル数 | 理由 |
|---|---|---|
| 屋外、直射日光 | 64–128 | ほとんどが直接光 |
| 一般的な製品/ポートレート | 256 | 標準的な品質 |
| バウンスのある屋内 | 512 | 間接光が多いほどノイズが増加 |
| コースティクス、ガラス、複雑な SSS | 1024–2048 | 収束が最も難しい |
必ずノイズ除去と組み合わせてください。256 サンプル+ノイズ除去は、視覚的な品質では未処理の 4096 サンプルに相当します。
よくある落とし穴
| 症状 | 対処法 |
|---|---|
Error: Cannot render, no camera | scene.camera is Noneです。レシピ 5/6 の冒頭にあるensure_camera()ガードを使用してください。最初の CAMERA オブジェクトを自動で割り当てます。オブジェクトがない場合は、明確なエラーを発生させます |
| レンダリングに何時間もかかる | サンプル数を減らし、アダプティブを有効にし、バウンス数を減らします |
| Cycles で GPU が使われない | 設定でコンピュートデバイスを設定します(レシピ 8) |
| MP4 に直接レンダリングしたところ、クラッシュで失われた | PNG シーケンスにレンダリングし、後からエンコードします |
| Standard ビュートランスフォームでハイライトが白飛びする | AgX または Filmic を使用します |
| ガラスが黒くレンダリングされる | transmission_bounces を増やします(16 以上) |
| EEVEE で反射が表示されない | Reflection Plane/Cubemap プローブを追加します |
| アニメーションのフレーム間でちらつく | 永続データを使用し、時間軸ノイズ除去を検討します |
| 出力ファイルが空/何もレンダリングされない | 最初にscene.render.filepathを設定し、静止画ではwrite_still=Trueになっていることを確認します |
references/overview.mdを読み込むタイミング
次の場合に読み込みます:
- エンジンの詳細な比較が必要な場合(Cycles と EEVEE の機能一覧)
- 特定のシーンタイプに合わせたライトパスの調整(コースティクス、葉、髪)
- コンポジターで再ライティングするためのライトグループ
- AOV/カスタムレンダーパス
- 分散レンダリング/レンダーファーム
このリファレンスでは、Cycles と EEVEE の全機能比較、シーン別のサンプル数の目安、ノイズ除去方式の比較(OptiX と OIDN)、ライトパスのバウンス調整、カラーマネジメントの詳細解説、アニメーションレンダリングのベストプラクティスを扱います。