blender-cameras について
Blenderでシーンを制作する人向けのカメラ設定スキルです。焦点距離、絞り、構図のガイドとレシピを備え、被写体のフレーミング、ポートレートや製品撮影、周回やドリーインのアニメーションを扱います。
主な機能
- 01焦点距離とショットの選択ガイド
- 02バウンディングボックスに基づくフレーミング
- 03ポートレートと製品撮影のレシピ
- 04構図ガイドとルール
- 05周回とドリーインのアニメーション
活用シーン
- 01浅い被写界深度のポートレート撮影
- 02製品レンダリングのクローズアップ構図
- 03環境シーンの広角エスタブリッシングショット
- 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')
プッシュイン(カメラを物理的に前進させる)は、ズーム(焦点距離を変える)とは見た目が異なります。映画的な雰囲気にはプッシュインを、監視カメラやニュース映像風の表現にはズームを使います。
構図のルール — 配置で徹底する
- 三分割法:被写体を中央ではなく、4つの交点のいずれかに配置します。
- 頭上の余白:頭上に約10%の空間を残します。
- 鼻先の余白:被写体が左を向いている場合、視線の先となる左側に空間を残します。
- 前景/中景/背景:3つの奥行きのレイヤーを作ると、より映画的な印象になります。
センサーサイズ
| センサー | 幅(mm) | 備考 |
|---|---|---|
| フルサイズDSLR/35mmシネマ | 36 | デフォルト |
| APS-C | 22.5 | 1.5–1.6×クロップ |
| Super 35 | 24.89 | 多くの映画撮影で使用 |
| マイクロフォーサーズ | 17.3 | ミラーレス |
| iPhone 15 Pro | 9.8 | スマートフォンの参考値 |
cam_data.sensor_width = 36 で設定します。
よくある問題
| 症状 | 対処法 |
|---|---|
| ポートレートで顔が歪む | 人物には50mm以上を使います |
| 被写体がぼけて背景にピントが合う | dof.focus_object を被写体に設定します |
| カメラが被写体の真正面にある | 三分割法を適用し、被写体の位置をずらします |
| オービットカメラが大きく傾く | 手動回転ではなく、Track-To制約を使います |
| アニメーション中にカメラが地面より下に移動する | Floor制約を追加するか、Zのキーフレームを確認します |
| Cyclesで被写界深度の処理が非常に遅い | 最終レンダリングでは許容できます。ビューポートではより簡易的な近似を使う場合があります |
references/overview.md を読み込むタイミング
次の場合に読み込みます。
- デフォルトを超えるシネマティックなエフェクト:アナモルフィック、レンズフレア、ビネット
- マルチカメラのシーン(編集用のカメラマーカー)
- カメラシェイク/手持ち撮影時のノイズ
- ステレオ/VR カメラのセットアップ
このリファレンスでは、焦点距離の理論全般、絞り/F値の表、構図ガイド、実際のカメラ(iPhone、シネマカメラ、DSLR)に合わせるためのセンサーの種類、アニメーションカメラのパターン、シネマティックなエフェクトを扱います。