
Blender 4.xで複数カメラをレンダリングする方法
なぜ一度に複数カメラをレンダリングするのですか?
プロフェッショナルなワークフローでは、複数のカメラアングルからレンダリングが必要です。建築ウォークスルーには5以上のビューポイントが必要で、製品可視化は前面/側面/上面ビューが必要で、VFXショットはロックされたカメラと代替アングルが必要です。各カメラを個別にレンダリングするのは面倒で時間がかかります。Blender 4.xは単一バッチで複数カメラをレンダリングする複数の方法を提供しています。これにより時間を節約し、効率的なファーム送信が可能になります。
我々は毎日数百の複数カメラジョブを処理するレンダーファームを管理しています。このガイドの技術は速度に最適化されており、Super Renders Farm のようなクラウドレンダーファームでネイティブにサポートされています。ローカルで作業する場合でも、ファームに送信する場合でも、これらのアプローチは複数カメラワークフローを合理化します。
方法1:シーンベースの複数カメラレンダリング
最もシンプルでファーム対応の方法は、各カメラの別々のシーンを作成することです。各シーンは同じジオメトリとマテリアルを共有しますが、アクティブカメラが異なります。その後、Pythonスクリプトを使用してすべてのシーンを順番にレンダリングします。
セットアップ:
- メインシーン(例:Scene)ですべてのカメラをセットアップします。必要なアングルの場所にカメラを配置します。
- ビューポートの右上隅にあるシーン セレクタ(「Scene」と表示されているドロップダウン)を見つけます。
- その横の**+** をクリックして新しいシーンを作成します。
- プロンプトが表示されたら、Link Objects を選択します。これはオブジェクト自体ではなくオブジェクト参照をコピーします。編集はすべてのシーンに適用されます。
- 各カメラに対して繰り返します。5つのカメラがある場合、5つのシーンを作成します:Scene、Scene.001、Scene.002 など。
- 各新規シーンで、Scene Properties > Camera に移動して、メインシーンの対応するカメラに設定します。
例:
- Scene:アクティブカメラ = Camera_Front
- Scene.001:アクティブカメラ = Camera_Side
- Scene.002:アクティブカメラ = Camera_Top
- Scene.003:アクティブカメラ = Camera_Iso
すべてのシーンが同じオブジェクトを共有しているため、マテリアルまたはジオメトリへの変更はすべてに適用されます。アクティブカメラのみが異なります。
すべてのシーンをレンダリング:
Pythonコンソールを使用してすべてのシーンを順番にレンダリングできます:
import bpy
scenes = bpy.data.scenes
output_folder = "/path/to/output/"
for scene in scenes:
bpy.context.window.scene = scene
bpy.context.scene.render.filepath = f"{output_folder}{scene.name}_render.png"
bpy.ops.render.render(write_still=True)
print(f"Rendered {scene.name}")
/path/to/output/ を実際の出力ディレクトリに置き換えます。このスクリプトはすべてのシーンを反復処理し、各シーンをアクティブにして、一意の名前を持つファイルにレンダリングします。
ファーム向け:
Super Renders Farm に送信する際は、このPythonスクリプトを含めて、レンダリング前スクリプトとして指定します。ファームは自動的に実行し、手動操作なしですべてのシーンをレンダリングします。
方法2:マーカーベースカメラバインディング
より複雑なワークフローの場合、カメラマーカーを使用して特定のカメラをフレームまたはレンダーパスにバインドします。異なるフレーム範囲で異なるカメラを使用したい場合に便利です。
セットアップ:
- Timeline Editor でフレームを右クリックして Add Marker を選択します。
- マーカーに説明的な名前を付けます(例:Camera_Wide_Start)。
- キーフレーム番号に追加マーカーを作成します(例:フレーム100で Camera_Close_Start)。
- 各マーカーについて、Marker Properties を開いてカメラと関連付けます。
マーカーベースのバインディングはシーンベースより複雑で、通常、カメラカットが特定のフレームで発生するモーショングラフィックスまたはアニメーションシーケンスに使用されます。
マーカーバインディング用Pythonスクリプト:
import bpy
def render_with_markers():
scene = bpy.context.scene
markers = scene.timeline_markers
output_folder = "/path/to/output/"
for i, marker in enumerate(markers):
if hasattr(marker, 'camera'):
scene.camera = marker.camera
frame_start = marker.frame
frame_end = markers[i + 1].frame if i + 1 < len(markers) else scene.frame_end
for frame in range(frame_start, frame_end):
scene.frame_set(frame)
scene.render.filepath = f"{output_folder}frame_{frame:04d}.png"
bpy.ops.render.render(write_still=True)
print(f"Rendered frame {frame} with {scene.camera.name}")
render_with_markers()
このアプローチはシングルフレームレンダーではあまり一般的ではなく、アニメーションシーケンスに大いに役立ちます。ほとんどの複数カメラ作業では、方法1(シーン)がよりシンプルです。
方法3:Pythonスクリプトを使用したバッチレンダリング
最大制御の場合、各カメラのカメラ、出力パス、レンダー設定を明示的に定義するPythonスクリプトを記述します。
スクリプト例:
import bpy
import os
output_base = "/path/to/output"
cameras_config = [
{"name": "Camera_Front", "file": "front_view.png"},
{"name": "Camera_Side", "file": "side_view.png"},
{"name": "Camera_Top", "file": "top_view.png"},
{"name": "Camera_Iso", "file": "isometric_view.png"},
]
scene = bpy.context.scene
for cam_config in cameras_config:
camera_name = cam_config["name"]
output_file = os.path.join(output_base, cam_config["file"])
scene.camera = bpy.data.objects[camera_name]
scene.render.filepath = output_file
scene.render.image_settings.file_format = 'PNG'
scene.render.image_settings.compression = 90
bpy.ops.render.render(write_still=True)
print(f"Rendered {camera_name} -> {output_file}")
print("All cameras rendered successfully!")
このスクリプトは明示的で変更が簡単です。各カメラエントリに設定を追加することで、カメラごとのレンダー設定を調整できます(解像度、サンプル、デノイザー設定)。
高度な:カメラごとの設定:
cameras_config = [
{
"name": "Camera_Front",
"file": "front_view.png",
"samples": 256,
"denoiser": True,
"resolution": (1920, 1080)
},
{
"name": "Camera_Close",
"file": "close_view.png",
"samples": 512,
"denoiser": True,
"resolution": (4096, 2304)
},
]
for cam_config in cameras_config:
scene.camera = bpy.data.objects[cam_config["name"]]
scene.render.filepath = os.path.join(output_base, cam_config["file"])
scene.render.resolution_x = cam_config["resolution"][0]
scene.render.resolution_y = cam_config["resolution"][1]
scene.cycles.samples = cam_config["samples"]
scene.cycles.use_denoising = cam_config["denoiser"]
bpy.ops.render.render(write_still=True)
これにより、各カメラを異なる解像度またはサンプル数でレンダリングできます。複数のアングルにわたるレンダリング時間を最適化するのに役立ちます。
方法4:複数カメラ出力用のコンポジタノードセットアップ
より高度なパイプラインの場合、コンポジタを使用して、単一のレンダーパスでカメラ間をジットまたは切り替えます。
セットアップ:
- Compositor エディタを開きます(Shift+F11 または Window > Toggle Compositor)。
- Use Nodes を有効にします(右上のチェックボックス)。
- コンポジタで、Cryptomatte ノードまたは ID Mask ノードを追加してカメラ別にレンダリングを分離します。
- または、フレーム番号ドライバで Switch Nodes を使用して、事前レンダリングされたカメラ出力間を自動的に切り替えます。
例:複数カメラシーケンス用のコンポジタスイッチ:
- 各カメラを個別にフレームシーケンスにレンダリングします。
- 各シーケンスを Image Sequence ノードとしてコンポジタにインポートします。
- Switch ノードまたは Mix ノードをフレーム番号ドライバで使用して、現在のフレームに基づいてどのカメラのフレームを出力するかを選択します。
- これにより、単一の合成タスクが再レンダリングなしで異なるフレーム範囲で異なるカメラを出力できます。
コンポジタ方法は高度で、通常、エフェクト作業または複数レンダリングを単一出力に統合する場合に使用されます。単純な複数カメラの静止画またはシーケンスの場合、方法1~3がより実用的です。
方法5:複数カメラを含むファームバッチ送信
Super Renders Farm に送信する場合、ファームの複数レンダリング機能を活用してすべてのカメラを並列にレンダリングします。
準備:
- 各シーンが一意で説明的な名前を持つことを確認します(例:Front_View、Side_View)。
- 各シーンに正しいアクティブカメラが設定されていることを確認します。
- Blenderファイルをエクスポートします。
送信:
- .blend ファイルをファームの送信ポータルにアップロードします。
- Render Settings で Render All Scenes(または同等のオプション)を選択します。
- 出力形式とディレクトリを指定します。
- レンダーノード数を設定します。ファームは利用可能なノードにシーンを配布し、複数のカメラを並列にレンダリングします。
ファーム送信例:
- Scene 1 → Node 1 (Camera Front) → 出力: front_view_001.png
- Scene 2 → Node 2 (Camera Side) → 出力: side_view_001.png
- Scene 3 → Node 3 (Camera Top) → 出力: top_view_001.png
10個のシーンがあり、ファームに10個以上のノードがある場合、すべてのカメラが同時にレンダリングされます。これは順序付きローカルレンダリングより大幅に高速です。
複数カメラレンダリング推奨ワークフロー
一貫したファイル命名を使用:
レンダー出力は明確にラベル付けされるべきです:
project_name_camera_front_001.exr
project_name_camera_side_001.exr
project_name_camera_top_001.exr
シーンを論理的に整理:
カメラアングル後のシーン名:Front_View、Side_View、Top_View、Isometric、Detail_Close。Scene.001 や RenderScene_v2 のような一般的な名前は避けてください。
カメラごとの解像度を最適化:
ファームにレンダリングする場合、各カメラを異なる解像度でレンダリングできます。ワイドショットは1920×1080で、詳細ショットは4096×2304である可能性があります。
コンポジット用に Cryptomatte または AOVs を使用:
ビューティレンダとともに Cryptomatte パスをレンダリングします。これにより、再レンダリングなしにポストプロダクションでIDでオブジェクトを分離できます。
FAQ
複数カメラのレンダリングはレンダリング時間を大幅に増加させますか?
並列ノードを備えたファームに送信する場合はそうではありません。ローカルで順番にレンダリングする場合、はい — N個のカメラにはおよそN倍の時間がかかります。ファームは利用可能なノードにシーンを配布することでこれを軽減します。
複数カメラを異なるフレーム範囲でレンダリングできますか?
はい。マーカーベースのバインディング(方法2)またはコンポジタを使用できます。たとえば、フレーム1~50を「Camera A」から、フレーム51~100を「Camera B」からレンダリングできます。
すべてのシーンが同じマテリアルとオブジェクトを共有する必要がありますか?
シーンベース方法の場合、はい。シーンを作成するときに「Link Objects」を使用して、ジオメトリとマテリアルを共有します。
複数カメラレンダリングにどの出力形式を使用すればよいですか?
プロフェッショナル作業には EXR を使用します(色深度と AOVs を保持)。ウェブ/プレビューには PNG を使用します。
モーションブラーまたは被写界深度を使用して複数カメラをレンダリングできますか?
はい。モーションブラーはレンダーごとに適用されるため、各カメラレンダーに有効にすると独自のモーションブラーが含まれます。被写界深度はカメラ固有です。
複数カメラ全体でカメラアニメーション(移動カメラ)をどのように処理しますか?
カメラがアニメーションされている場合、各シーンは自身のカメラアニメーションをレンダリングします。他のシーンは自身のカメラアニメーションを独立してレンダリングします。
関連記事
Blenderレンダリング最適化の詳細については、クラウドレンダーファームセットアップに関する包括的なガイドを参照してください。レンダリングソリューションについては、一般的なレンダリング問題ガイドも参照してください。
クラウド送信の場合、Blenderクラウドレンダーファームガイドを参照して、サポートされている機能、Super Renders Farm でのバッチレンダリング、最適化のヒントについて学びます。


