scenario-unreal-cinematics について
Sequencer と Movie Render Graph を使う Unreal Engine 5.8 の映像制作チーム向けスキルです。編集計画、ショット構築、レンダリング検査、EXR納品を検証可能な手順にまとめます。
主な機能
- 01データでショットと編集構成を計画
- 02共通テンプレートからSequencerショットを構築
- 03プリロール、フレーム、カットの連続性を確認
- 04ショット単位でMovie Render Graphを実行
- 05EXR出力を監査し納品メモを作成
活用シーン
- 01アニメーション前にショット計画とテンポを確認
- 02ショットのライティングと画を制作・レビュー
- 03最終レンダリングのEXRと色管理を設定
- 04レンダリング後に編集リストと納品物を整理
MCP 対応
ワークフローでは MCP SequencerTools ツールセットの確認を推奨し、エディター作業に MCP または PythonRemote を利用できます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-unreal-cinematicsインストール後、Claude Code で/scenario-unreal-cinematicsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/critique.mdexpert-notes.mdgui-paths.mdprocedures.mdsources.mdscripts/cine_render_callbacks.pyue_cine.py詳細
Unreal Engine 5.8 のシネマティクス(Sequencer と Movie Render Graph)
ここでいうエキスパートレベルとは、構築を始める前にカットをデータとして確認し、ビューポートではなく、ファイルとフレームを基準にレンダーを評価することです。基本方針は、オフラインで計画し、1 回のトランザクションで構築し、アニメーションを付ける前に音楽に合わせてタイミングを確定し、承認済みのマスターを基準にライティングを行い、1 つのテンプレートグラフを使ってショットごとにレンダーし、リニア EXR、編集データ、カラーグレーディング用のメモをカラーグレーディング工程に渡すことです。ここに記載されている関連スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください
(npx skills add scenario-labs/skills --skill <name>)。無人で進める場合は、ツールのスキーマをもとに作業し、不足している点を明示してください。
必須の前提知識: scenario-unreal-expert(チャンネル、レビューの反復、5.8 の落とし穴)。
ステータス(2026-09-24): scripts/ue_cine.py と
scripts/cine_render_callbacks.py は、まだ Unreal で実行されていません。オフラインテストは合格しています(件数は references/sources.md を参照)。エンジンでは、まず tests/code/unreal-cinematics/job_00_probe_cine.py を実行してください。
基本方針(エキスパートによる差分)
- マスターは編集用、内容を持つのはショットです。 カメラ、キャラクター、キーはショット内に置き、照明や FX など分野別のサブシーケンスもショット内に置きます。そのため、ペースを調整するとセクションが移動し、アニメーションは移動しません(Sir Wade、ywtvn1uncZo [00:07:32]、Glitch、uzTo5vQchkk [00:35:24])。ショットごとの要素はスポーン可能オブジェクト、セットは所有可能オブジェクトにすることで、シネマティックをどのレベルでも再生できます(yOcgYMcxr3Q [00:07:53] [00:13:50])。あるショットでアニメーションさせた所有可能オブジェクトは、ショットの終了後に元の状態に戻ります。アウトライナーの表示状態は保存されませんが、レベルパネルの表示状態は保存されます([00:10:34] [00:02:23])。マスターを複製してもショットは共有されるため、「誰かが照明を調整すると、7つのショットが変わってしまいます」(Epic CAT、S4Iyzbl-oaE [00:41:34])。試行には New Take を使います。
- 構造はテンプレート化してスクリプトで作成し、手作業で組み立てません。 表示レート、開始フレーム、バイアス、命名規則、フォルダーテンプレートは、リビジョン管理下の
DefaultEngine.iniで一度だけ設定します(S4Iyzbl-oaE [00:15:22] [00:21:52])。CAT 5.8 のスキーマはネストでき、ショットごとに独自のレベルを持たせられます(VP 5SJA1FfRPWs [00:19:07] [00:20:44])。すべてのツールをScopedEditorTransactionとScopedSlowTaskで囲みます。「実行時間の長い Python コードは、エンジンがフリーズしたように見えます」(SPI、moQTQzAOFVA [00:16:16])。 - アニメーションを始める前にタイミングを確定します。 一定のキーを使って絵コンテを作り、音楽は専用のトラックに置き、アクセント音はカットにぴったり合わせます。「最終的な映像に入らないフレームの作業に時間をかけたくはないでしょう」(Toonen、mAMp6qCt7kc [00:15:04] [00:15:36] [00:04:55])。リタイミングでは意図を維持する必要があります。キーはショットと一緒に移動させ、複数のショットにまたがるサブシーケンスは分割し、それぞれの部分に独自のアセットを割り当てます(moQTQzAOFVA [00:14:04] [00:24:19])。
- ウォームアップには3つの対策があり、終了フレームは範囲に含まれません。 CPU シミュレーションがアイドル状態の場合:Engine Warm Up Count を 30 より大きくします。テンポラル履歴の場合:Render Warm Up を使います。フレーム1で動いているものがある場合:開始前までアニメーションとカメラカットを延長し、カメラカットのウォームアップを設定します。これにより、フレーム1を保持する代わりに、開始前のフレームが評価されます(tips doc、Comly/Hoffman、demystifying MRQ)。範囲を 0~50 にすると、0~49 がレンダリングされます。
- サンプルで得られるのはモーションブラーとアンチエイリアスだけです。 ノイズの原因は元までたどって特定します(demystifying MRQ、Faucher、fVg5ihB8Wdc [00:09:15])。Temporal のみなら Frame Center と奇数のサンプル数を使い、Blur なら Frame Close と 24/48/64 サンプルを使います(AAAhD5tEUBs [00:39:32])。8 サンプルを超える場合は AA None を使います。名前を付けたショット固有の問題に対処する必要が生じるまでは、コンソール変数は使いません(fVg5ihB8Wdc [00:03:00])。
- 線形 EXR を使って外部でグレーディングし、その読み方を明記します。 トーンカーブをオフにすると線形 sRGB になり、UE のトーンカーブは「ACES 風ですが、真の ACES ではない」ため、ビューポートより約1段暗くなります(Faucher、2Q3CybANHKE [00:04:31] [00:09:39])。Resolve の ACES Transform:トーンカーブがオンの場合は sRGB (Linear) から sRGB Texture、オフの場合は Linear sRGB から sRGB。ACEScg は(ベンダーに渡す場合のみ)ACEScg から sRGB です([00:08:30] [00:09:05])。ビューポートの OCIO Display をそのビューに設定して、照明確認とレビューを行います([00:10:28] [00:11:00])。
- レンダリングの単位はショットです。 「Unreal Engine で配布可能な作業の最小単位は、単一のカメラカットです」(MRQ command-line doc)。ショットごとにジョブを1つ、テンプレートグラフを1つ用意し、ジョブごとの変数オーバーライドを使います。共有グラフは編集しません。通常の MRQ は監視が必要で、クラッシュするとショットが失われるため、複数ショットの無人レンダリングにはファームマネージャーを使います(Glitch [00:40:14])。
- 照明はプロセスによって拡張できます。 初日から仮のカメラライトを使います。次に、照明シナリオごとに代表的なショットを1つか2つ作り、ディレクターと一緒に確定します。その後、それらを元にショットごとの
_LGTサブシーケンスを作り、マスターからの距離に応じてグレーディングします(Glitch [00:27:18] [00:28:51] [00:29:23] [00:31:32] [00:36:59])。
最初に確認すること
| 入力 | 変更内容 | 指定がない場合のデフォルト |
|---|---|---|
| 出力形式:グレーディング済みまたはダイレクト | トーンカーブ、形式、OCIO、カラーに関する注意事項 | グレーディング済み:EXR 16-bit half、トーンカーブ無効 |
| 制作記録(レート、開始位置、バイアス、命名規則) | すべてのシーケンス、EDL | プロジェクトの DefaultEngine.ini。それ以外の場合は24 fps、開始位置0(SPI 101、CAT デモ1000:編集に合わせる) |
| 尺、ショット、音楽 | レイアウト、スティンガー | ブリーフ。絵コンテ作成前に仮トラックを用意 |
| アスペクト比とフィルムバック | レンズ、フレーミング | 16:9 デジタルフィルム[mmを確認]。スコープでは2.39にクロップ |
| レベルと既存の要素 | バインディング | 所有可能に設定。カメラ、キャラクター、ショットライトはスポーン可能にし、マスターライティングはレベル内に配置 |
| キャスト | プリロール、コスト | 既存のアニメーションシーケンス。キャラクターごとのジョイントとメッシュ |
| ショットごとの動き、シャッタータイミング | サンプル数、プリロール | フレーム中央、奇数のサンプル数 |
| 露出 | 連続性 | マニュアル、物理カメラ。絞りの変更はISOで補正 |
| チャンネル | ビルド、絵コンテ、レンダー | 絵コンテではライブエディター(MCP、PythonRemote)。最終出力では ue_run またはコマンドライン |
ワークフロー
import ue_cine as C(scripts/ スキル。scenario-unreal-expert の scripts/ をパスに追加)。全コードは references/procedures.md を参照してください。
- スキャフォールド(プロジェクトごとに一度)。 Production Setup(CAT)または Project Settings で本番環境のデフォルトを一度記録し、
plan["production"]にコピーします。フォルダーテンプレート、10刻みのショット番号を設定します。CAT 5.8 では、ショットスキーマに_LGTスキーマを保持し、ショットごとに固有のセット状態が必要な場合はショットごとにレベルを作成します(P2)。まず MCP SequencerTools ツールセットを確認します[要検証]。ゲート:C.check_production(plan)に失敗がないこと、audit_sequenceの seq.rate と seq.start を確認します。 - カットをデータとして計画(python3)。 ショット、サイズ、レンズ、カメラと被写体の位置、動き、フラグ、キャスト(ジョイント、メッシュ)、スタンガー、ライティングシナリオを設定します。
C.check_plan(plan)で、長さ、レンズ、フレーミング、180度ライン、画面上の方向、ジャンプカット、DOF、プリロール、露出、キャスト、スタンガー、ライティンググループを確認します(P1)。ゲート:失敗がないこと。すべての警告を修正するか、計画内で対処します。 - 1つのトランザクションで構築(エディター)。
C.build_from_plan(plan):Shots と音楽を含むマスター、ショットごとにスポーン可能な Cine Camera(レンズにキーを設定し、LOD 用に Use Field of View をオン)、プリロールから排他的な終了点までのカメラカット、プリロール済みのパフォーマー、一時ライトを含む<shot>_LGT(P3)を作成します。既存のものは上書きしません。ゲート:C.audit_sequenceに失敗がないこと、bind.overrideに回答済みであること、C.empty_level_testにセットピースのみが表示されること。 - ボードを作成し、カットをロック(レイテンシーのあるエディター)。
C.board_generator(..., preroll=True):各ショットの最初・中間・最後のフレームに加え、各ショットの最初のプリロールフレームを単独で読み込みます(GUI:Evaluate Sub Sequences In Isolation)。ue_review.image_checksとコンタクトシートを確認します(P4)。リタイミング(C.retime_shot)、テイク(C.new_take)、C.editor_tool内の独自ツール(P5)を使用します。ゲート:全白または全黒のフレームがないこと、シートと音楽付きのカットが評価済みであること、C.ready_to_animate(plan)を通過すること。 - 演技とカメラの仕上げ。 キー設定した Manual Focus Distance でラックフォーカスを行い(P6)、カメラの動きをベース、オフセット、シェイクのレイヤーとして構成します(P7)。Accumulation DOF は DOF が中心となるショットのみに使用します。ゲート:再度ボードを作成します。キー設定したフォーカスが被写体までの距離と一致すること、セクション境界でポップがないことを確認します。
- ライティング(scenario-unreal-lighting-rendering と連携)。 一時ライトのレンダーで全員が作業を進められるようにします。
C.lighting_masters(plan)を実行し、その結果のみをレンダーします(render_jobs(plan, only=...))。ディレクターの承認をplan["lighting_approved"]に記録します。その後、_LGTにショットごとのリムライトとキックライトを追加し、ビューポートの OCIO Display を通してライティングします(P7b)。ゲート:C.ready_for_final_lighting(plan)を実行し、輝度の連続性とマスターに対する承認を確認します。ショットの処理が遅い場合はstat unitまたは Insights トレースを確認します。 - ドラフトをレンダーしてレビュー。 レビューグラフまたは 5.8 Basic config を使用し、音楽付きで
C.review_movie_cmdを実行します(P10)。ゲート:C.check_render_output、C.first_frame_pop、C.cut_flashを実行し、音声付きで視聴します。 - 最終 EXR。 P8 に従ったテンプレートグラフと
CineWrittenFilesExecute Script(Editor Only)を使用します。C.audit_render_settings(C.normalize_graph_snapshot(C.graph_snapshot(graph)))を実行します。C.render_jobs(plan, sequences=C.active_shot_paths(master, plan))、C.render_orchestration、続いて(executor をグローバルに保持した状態で)C.render_generator、またはショットごとにC.mrq_command_lineを実行します(常に-notexturestreamingを指定)(P9)。ゲート:設定監査に合格すること、C.check_manifestとサンプルフレームごとのC.exr_checksを実行すること。クラッシュ後は、C.shots_to_render(...)で返されたショット全体を再レンダーします。 - 納品。 ショットごとの EXR、
C.edl(plan)、レビュー用 MP4、C.delivery_note(plan, settings)(Resolve の解釈)、JSON レポートを納品します。メモは技術面とクリエイティブ面に分け、クリエイティブレビューを3ラウンド行った後、ライブセッションを実施します(Glitch [00:32:37] [00:33:40])(P11)。
数値
| 項目 | 値 | 比較対象、出典 |
|---|---|---|
| 階層バイアス | ルートは 0、階層ごとに +100、同じ値はブレンドされます | shots doc |
| プリロール | 布、髪、動いているパーティクルでは 24〜48 フレーム | digest; tips doc |
| エンジンのウォームアップ、クロスシミュレーションのアイドル状態 | 30 フレーム超 | tips doc |
| 時間サンプル | フレームクローズ:基本は 24(Blur のショットの 95%)、速い動きでは 48、非常に速い動きでは 64。フレームセンター:奇数(15、25、49、65。Faucher によると、15〜31 で 95〜98% をカバー) | AAAhD5tEUBs [00:39:32] [00:40:05]; fVg5ihB8Wdc [00:06:01] [00:10:58] |
| AA 方式 | 合計サンプル数が 8 を超える場合はなし | MRG image quality doc |
| ウォームアップのサンプリング | ウォームアップの最後の 5 フレームのみをサンプリングします | 5.6 and 5.8 notes |
| リニアとビューポートの差 | 約 1 ストップ暗くなります | 2Q3CybANHKE [00:09:39] |
| レビュー用 MP4 動画のビットレート | fps × 2 × 1000 kb/s(24 fps の場合は 48,000) | 2Q3CybANHKE [00:22:54] |
| キャラクター | ジョイント数は 200 未満 | Glitch [00:05:33] |
| マスターライティング | 400 ショットのエピソードにつき 10〜13 人日、各 1〜2 日 | Glitch [00:28:51] |
品質ゲート
- 測定可能:
check_plan、ready_to_animate、ready_for_final_lighting、audit_sequenceは必ず成功すること。audit_render_settingsは失敗せず、警告への未回答がないこと。フレーム数の終端は排他的であること(check_render_output、check_manifest)。EXR はハーフ精度で、NaN や Inf がなく、黒ではなく、リニア時の明るいショットでは値が 1.0 を超え、メタデータが存在すること。first_frame_popとcut_flashは false であること。輝度の急変は意図した箇所に限ること。 - 視覚: コンタクトシート、分離したプリロールフレーム、最初のフレーム、すべてのカット、髪やオクルーダーの DOF エッジ、最速のモーションブラー、グレードの OCIO ビューを通したマスターとのライティングの比較、音楽に合わせたカット。
よくあるミス
| ミス | 発生する問題 | 対処法 |
|---|---|---|
| 実験のためにマスターを複製する | 変更が「バックアップ」にも反映される | ショット内で新しいテイク(new_take)を作成する |
| キャラクターやカメラをポゼッサブルにする | 別のマップで動作しなくなる | スポーナブルを使用する。empty_level_test |
| セットピースをポゼッサブルとしてアニメーションさせる | ショット終了後に元の状態に戻る | 必要な箇所でキーを打つか、スポーナブルを使用する(bind.override) |
| アウトライナーの目のアイコンでアクターを非表示にする | 再度開くと表示される | レベルパネルまたはレベル表示トラックを使用する |
| 複数のスケルタルメッシュに1つのアニメーショントラックを使う | パーツが追従しない | リーダーポーズコンポーネントを設定する(check_characters) |
| 長時間実行するPythonツールで進捗を表示しない | 「フリーズ」したエディターが書き込み途中で終了する | editor_tool |
| タイミングが確定する前にアニメーションを作成する | カットされるフレームに作業してしまう | 絵コンテを作成し、カットにスティンガーを配置する。ready_to_animate |
| 実行中のキャラクターにエンジンウォームアップを使う | 1フレーム目でクロスが跳ねる | プリロールとカメラカット時のウォームアップを使う |
| 最終フレームが含まれると思い込む | 0から50までの範囲でフレーム50が「欠落」する | 終了位置は範囲に含まれません。end - startで数える |
| ノイズ対策としてサンプル数を増やす | 時間だけがかかり、ノイズは変わらない | ライトまたはポストプロセス設定を修正する |
| フレームセンターで均等なサンプルを使い、時間サンプルと空間サンプルを混在させる | カクつきや無駄が生じる | 奇数の時間サンプルのみを使う(またはフレームクローズで24を使う) |
| マスターを作らずにショットごとにライティングする | クリエイティブ面での変更が遅れる | まずマスターを承認する |
| デフォルトのビューポートでライティングし、リニアでレンダリングする | 見た目が1ストップ分変わる | ビューポートのOCIO表示を使う |
| 解釈方法を指定せずにリニアEXRを送る | Resolveで暗く、不自然な色になる | delivery_note |
| ショットごとに共有グラフを編集する | すべてのジョブに変更が反映される | ジョブごとに公開変数を使う |
| ローカルキューを一晩稼働させる、またはローカルエグゼキューターを使う | クラッシュするとキューが失われ、レンダリングが停止する | ファームマネージャーまたはショットごとに1つのプロセスを使う。shots_to_render。start_render |
-notexturestreamingを指定せずにヘッドレスレンダリングする | 最初のフレームがぼやける | mrq_command_line |
引き継ぎ
- 受け取り元 scenario-unreal-lighting-rendering:ライティング済みレベル(空、フォグ、キーライト、アンバウンド PPV、露出ポリシー、サブレベルまたはデータレイヤーとしてのマスターライティング)、発生源でノイズを修正済みの状態、承認用のライティング済みマスター。scenario-unreal-animation:長さとレートが設定された Animation Sequences、複数メッシュの Blueprint で Set Leader Pose Component を使用した 200 ジョイント未満のキャラクター、クロスまたは物理のフラグ。scenario-unreal-vfx:ユーザーパラメーターとウォームアップ要件を設定した Niagara システム。scenario-unreal-world-building:マップとそのセットピース。
- 引き渡し先 エディターとカラーリスト:ショットごとの EXR
(
{sequence_name}/{sequence_name}.####.exr、リニア、ハーフ、メタデータ)、<prod>.edl、納品メモ、レビュー用 MP4、コンタクトシート、JSON レポート、マスター。scenario-unreal-lighting-rendering:連続性またはノイズに問題があるショットと、そのフレーム。ファーム用コマンドは scenario-unreal-pipeline-automation へ、処理の遅いショットは scenario-unreal-performance へ。
UE 5.8 の注意事項
- MRG は Production Ready です。新機能はグラフのみで、キューは Basic 設定で開きます。新機能:Light Modifier、レイヤーのウォームアップ、DWAA/DWAB EXR、Accumulation DOF(実験的プラグイン)(5.8 notes;VP [00:33:35])。
- MRG では、Game Overrides は接続中のみ機能します。トーンカーブはレンダラーノードに、OCIO は出力ノードに設定します。Execute Script ノードで Python を使うには、Editor Only モードが必要です(移行ドキュメント;5.8 notes)。
- Spawnables はカスタムバインディングです。
LevelSequenceEditorSubsystem.add_spawnable_from_classで作成してください。add_master_trackはありません。時間関数にはMovieSceneTimeUnitを指定します(seq-py doc;バージョン間の変更点)。 - 再生では選択範囲が反映されます。Sensor Aspect Ratio はアニメーション化できません。Take Recorder と VCam は spawnables に対応しています。実験には Sandboxes を使用してください。
- ACES 2.0 対応の OpenColorIO 2.5.1:ビュー名が「ACES 1.0 SDR Video」と異なる場合があります[要確認]。
- Mac:MRG の H.264 ノードは Windows 専用です(ffmpeg でエンコード)。Mac での ProRes には競合があります[要確認]。パストレーシングには macOS 26.4 以降が必要です。
参考資料
references/procedures.md:P0 から P11、コード全文、プランのフィールド、テンプレートグラフの仕様(P8)。Sequencer またはレンダーのコードを書く前に読み込んでください。references/expert-notes.md:専門家ごとの判断、タイムスタンプ、判断条件。references/critique.md:ルーブリックと、コードチェックとの対応。references/gui-paths.md:同じ手順に関するメニューと設定。references/sources.md:ソース、認証情報、URL、タイムスタンプ、改訂履歴。scripts/ue_cine.py(ツールキット。docstring にすべての呼び出しを記載)およびscripts/cine_render_callbacks.py(Execute Script クラス)。