mcpField
B
blender-cameras

blender-cameras

github.com/roble3クリエイティブ・メディア1281.2k 回インストール2 週間前に更新
リポジトリ

blender-cameras について

Blenderでシーンを制作する人向けのカメラ設定スキルです。焦点距離、絞り、構図のガイドとレシピを備え、被写体のフレーミング、ポートレートや製品撮影、周回やドリーインのアニメーションを扱います。

主な機能

  1. 01焦点距離とショットの選択ガイド
  2. 02バウンディングボックスに基づくフレーミング
  3. 03ポートレートと製品撮影のレシピ
  4. 04構図ガイドとルール
  5. 05周回とドリーインのアニメーション

活用シーン

  1. 01浅い被写界深度のポートレート撮影
  2. 02製品レンダリングのクローズアップ構図
  3. 03環境シーンの広角エスタブリッシングショット
  4. 04被写体の周回やドリーインのアニメーション

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/roble3/cc-blender-skill --skill blender-cameras

インストール後、Claude Code で/blender-camerasを入力して読み込まれたか確認します。

同梱ファイルevals/evals.jsonreferences/overview.md

詳細

Blender カメラ

実際の撮影監督と同じ判断でカメラを設定します。画角は雰囲気に、絞り値はピントに、構図はストーリーテリングに影響します。

焦点距離早見表

焦点距離印象用途
14–24mm非常に広角、歪みが強い建築物、閉塞感のある室内、誇張された遠近感
28–35mm広角、「ドキュメンタリー」風導入ショット、環境
50mmニュートラル(≈人間の視野)標準的なストーリーテリング
85mm中望遠ポートレート、人物のクローズアップ(魅力的に写る)
100–135mm望遠主役の商品ショット、被写体を際立たせる撮影
200mm+超望遠野生動物、監視カメラ風、強い圧縮効果

簡単なルール:親密さには85mm、迫力には24mm、ニュートラルな表現には50mmを使います。

絞り/F値

F値被写界深度用途
f/1.2–2.0非常に浅い主役のポートレート、夢のような表現
f/2.8浅い標準的なポートレート
f/4中程度2人の被写体をフレームに収める
f/5.6–8中〜深グループポートレート、環境
f/11+非常に深い風景、「すべてにピントが合った」表現

レシピ

レシピ 0 — バウンディングボックス対応の主役カメラ(オーケストレーターのチェーンで推奨)

特定の被写体がある場合に使います。被写体のバウンディングボックスを計算し、被写体がフレームの垂直方向の約80%に収まる距離にカメラを配置して、Track-Toで狙いを定めます。

import bpy, math
from mathutils import Vector

# Choose subject — all meshes named GEO-* by default, or pass a specific list
subject_meshes = [o for o in bpy.data.objects if o.type == 'MESH' and o.name.startswith('GEO-')]
if not subject_meshes:
    raise RuntimeError("No subject meshes found (looking for GEO- prefix)")

# World-space bbox
deps = bpy.context.evaluated_depsgraph_get()
all_verts = []
for o in subject_meshes:
    eo = o.evaluated_get(deps); em = eo.to_mesh()
    for v in em.vertices:
        all_verts.append(o.matrix_world @ v.co)
    eo.to_mesh_clear()
xs = [v.x for v in all_verts]; ys = [v.y for v in all_verts]; zs = [v.z for v in all_verts]
center = Vector(((min(xs)+max(xs))/2, (min(ys)+max(ys))/2, (min(zs)+max(zs))/2))
height = max(zs) - min(zs)
width = max(xs) - min(xs)
biggest = max(height, width)

# Frame fit: at distance D, vertical frame = D × (sensor_h / focal). Solve for D.
focal_mm = 60        # 60mm gives a flattering not-too-wide hero shot
sensor_h_mm = 24     # full-frame
frame_per_meter = sensor_h_mm / focal_mm   # 0.4 m vertical frame per metre of distance
target_fill = 0.80
camera_distance = biggest / (frame_per_meter * target_fill)

# Camera positioned in front (negative Y) with slight X offset for a 3/4 angle
cam_pos = Vector((center.x + camera_distance * 0.3, center.y - camera_distance, center.z))

# Empty for tracking
empty_name = 'Empty-camera_target'
empty = bpy.data.objects.get(empty_name) or bpy.data.objects.new(empty_name, None)
if empty.name not in [o.name for o in bpy.context.collection.objects]:
    bpy.context.collection.objects.link(empty)
empty.location = center

# Camera
cam_data = bpy.data.cameras.new('CAM-hero')
cam_data.lens = focal_mm
cam_data.dof.use_dof = True
cam_data.dof.aperture_fstop = 4.0
cam_data.dof.focus_object = subject_meshes[0]   # focus on first/main subject

cam = bpy.data.objects.new('CAM-hero', cam_data)
bpy.context.collection.objects.link(cam)
cam.location = cam_pos

track = cam.constraints.new('TRACK_TO')
track.target = empty
track.track_axis = 'TRACK_NEGATIVE_Z'
track.up_axis = 'UP_Y'

bpy.context.scene.camera = cam
print(f"camera:bbox_aware center={tuple(round(v,2) for v in center)} dist={camera_distance:.2f}m focal={focal_mm}mm")

細長い垂直の被写体(剣、旗、ろうそく)の場合、最大の寸法は高さです。フレーミングの計算では高さが垂直方向のフレームの80%に収まるため、意図どおりになります。

横に広い被写体(車、テーブル)の場合、最大の寸法は幅です。幅も垂直方向のフレームの80%に収まるように計算されるため、ズームしすぎになります。その場合は frame_per_meter_h = (sensor_h_mm * aspect_ratio) / focal_mm に置き換えるか、target_fillを小さく調整します。

レシピ 1 — 主役のポートレートカメラ(85mm+浅い被写界深度)
import bpy, math

subject = bpy.data.objects.get('GEO-subject')   # change to your subject

# Camera
cam_data = bpy.data.cameras.new('CAM-hero')
cam = bpy.data.objects.new('CAM-hero', cam_data)
bpy.context.collection.objects.link(cam)
bpy.context.scene.camera = cam

cam.location = (3, -4, 1.6)
cam_data.lens = 85
cam_data.sensor_width = 36

# Depth of field
cam_data.dof.use_dof = True
cam_data.dof.aperture_fstop = 2.8
if subject:
    cam_data.dof.focus_object = subject

# Track-to constraint (auto-aim at subject)
if subject:
    track = cam.constraints.new('TRACK_TO')
    track.target = subject
    track.track_axis = 'TRACK_NEGATIVE_Z'
    track.up_axis = 'UP_Y'

print('camera:CAM-hero set')
レシピ 2 — 広角の環境導入ショット(24mm)
import bpy, math

cam_data = bpy.data.cameras.new('CAM-establish')
cam = bpy.data.objects.new('CAM-establish', cam_data)
bpy.context.collection.objects.link(cam)
bpy.context.scene.camera = cam

cam.location = (8, -10, 2.5)
cam.rotation_euler = (math.radians(80), 0, math.radians(35))

cam_data.lens = 24
cam_data.sensor_width = 36
cam_data.dof.use_dof = False

print('camera:CAM-establish (24mm wide)')
レシピ 3 — 商品の主役ショット(100mm+マクロの被写界深度)
import bpy, math

subject = bpy.data.objects.get('GEO-product')

cam_data = bpy.data.cameras.new('CAM-product')
cam = bpy.data.objects.new('CAM-product', cam_data)
bpy.context.collection.objects.link(cam)
bpy.context.scene.camera = cam

cam.location = (0.4, -1.5, 0.2)   # close-in
cam_data.lens = 100
cam_data.sensor_width = 36
cam_data.dof.use_dof = True
cam_data.dof.aperture_fstop = 2.0
if subject:
    cam_data.dof.focus_object = subject

if subject:
    track = cam.constraints.new('TRACK_TO')
    track.target = subject
    track.track_axis = 'TRACK_NEGATIVE_Z'
    track.up_axis = 'UP_Y'

print('camera:CAM-product (100mm hero)')
レシピ 4 — 構図ガイド(三分割法オーバーレイ)
import bpy

cam_data = bpy.data.cameras['CAM-hero']
cam_data.show_composition_thirds = True
cam_data.show_composition_golden = False
cam_data.show_composition_center = False
print('composition:thirds_on')

これらのオーバーレイはビューポートにのみ表示され、レンダリングには影響しません。

レシピ 5 — オービットカメラのアニメーション(10秒で360°回転するターンテーブル)
import bpy, math

target = bpy.data.objects.get('GEO-subject')

# Empty as pivot
pivot = bpy.data.objects.new('Empty-orbit_pivot', None)
bpy.context.collection.objects.link(pivot)
if target:
    pivot.location = target.location

# Camera child of pivot
cam_data = bpy.data.cameras.new('CAM-orbit')
cam = bpy.data.objects.new('CAM-orbit', cam_data)
bpy.context.collection.objects.link(cam)
cam.parent = pivot
cam.location = (0, -5, 0.5)
cam.rotation_euler = (math.radians(85), 0, 0)
cam_data.lens = 50

bpy.context.scene.camera = cam

# Animate pivot's Z rotation: 0 → 360° over frames 1..240 (10s @ 24fps)
pivot.rotation_euler = (0, 0, 0)
pivot.keyframe_insert('rotation_euler', frame=1)
pivot.rotation_euler = (0, 0, math.radians(360))
pivot.keyframe_insert('rotation_euler', frame=240)

# Set linear interpolation for constant orbit speed
if pivot.animation_data and pivot.animation_data.action:
    for fc in pivot.animation_data.action.fcurves:
        for kp in fc.keyframe_points:
            kp.interpolation = 'LINEAR'

print('camera:CAM-orbit (10s turntable)')
レシピ 6 — プッシュイン/ドリー(ズームせずにカメラを前進)
import bpy

cam = bpy.data.objects['CAM-hero']

# Start position
cam.location = (3, -8, 1.6)
cam.keyframe_insert('location', frame=1)

# End position (closer to subject)
cam.location = (3, -4, 1.6)
cam.keyframe_insert('location', frame=120)
print('camera:dolly_5s')

プッシュイン(カメラを物理的に前進させる)は、ズーム(焦点距離を変える)とは見た目が異なります。映画的な雰囲気にはプッシュインを、監視カメラやニュース映像風の表現にはズームを使います。

構図のルール — 配置で徹底する

  1. 三分割法:被写体を中央ではなく、4つの交点のいずれかに配置します。
  2. 頭上の余白:頭上に約10%の空間を残します。
  3. 鼻先の余白:被写体が左を向いている場合、視線の先となる左側に空間を残します。
  4. 前景/中景/背景:3つの奥行きのレイヤーを作ると、より映画的な印象になります。

センサーサイズ

センサー幅(mm)備考
フルサイズDSLR/35mmシネマ36デフォルト
APS-C22.51.5–1.6×クロップ
Super 3524.89多くの映画撮影で使用
マイクロフォーサーズ17.3ミラーレス
iPhone 15 Pro9.8スマートフォンの参考値

cam_data.sensor_width = 36 で設定します。

よくある問題

症状対処法
ポートレートで顔が歪む人物には50mm以上を使います
被写体がぼけて背景にピントが合うdof.focus_object を被写体に設定します
カメラが被写体の真正面にある三分割法を適用し、被写体の位置をずらします
オービットカメラが大きく傾く手動回転ではなく、Track-To制約を使います
アニメーション中にカメラが地面より下に移動するFloor制約を追加するか、Zのキーフレームを確認します
Cyclesで被写界深度の処理が非常に遅い最終レンダリングでは許容できます。ビューポートではより簡易的な近似を使う場合があります

references/overview.md を読み込むタイミング

次の場合に読み込みます。

  • デフォルトを超えるシネマティックなエフェクト:アナモルフィック、レンズフレア、ビネット
  • マルチカメラのシーン(編集用のカメラマーカー)
  • カメラシェイク/手持ち撮影時のノイズ
  • ステレオ/VR カメラのセットアップ

このリファレンスでは、焦点距離の理論全般、絞り/F値の表、構図ガイド、実際のカメラ(iPhone、シネマカメラ、DSLR)に合わせるためのセンサーの種類、アニメーションカメラのパターン、シネマティックなエフェクトを扱います。

コメント