こんにちは、パレイド技術部です。
「背景モニタ合成Lab」連載の最終回です。第1回から第6回まで、個々のパーツを一つずつ組み上げてきました。
3Dシーン生成、Depth ControlNet による背景画像生成、砂嵐映像の合成、ホモグラフィ変換による画面合成――これらすべてを、今回は1本のパイプラインとして通しで実行し、完成サンプル動画を作成します。
パイプライン全体の実行
最終的なパイプラインは5つのステップで構成しました。
Step 1: 3Dシーン生成(Python)
第4回で作成した Blender 向けの3Dシーンファイルを出力します。screen_meta.json にはスクリーンの3D座標情報が含まれます。

Step 2: デプスマップ生成(Blender)
Blender のヘッドレスモードでデプスマップをレンダリングします。screen_regions.json にはスクリーンの2D投影座標が書き出されます。この座標が後段の合成で使われます。

Step 3: 背景画像生成(ComfyUI)
ComfyUI の API 経由で realVisXL と Depth ControlNet を使った画像生成を実行します。Step 2 の深度を条件入力として渡すことで、3Dシーンのレイアウトに忠実な背景画像が得られます。

Step 4: 砂嵐映像生成(Python)
第5回で実装した多層ノイズ生成スクリプトです。ガウシアンノイズ + スキャンライン + フレームごとの輝度揺らぎを合成し、ホワイトノイズ音声とともに mp4 に書き出します。
Step 5: 最終合成(Python)
第6回で実装したホモグラフィ変換による合成を実行します。screen_regions.json の四隅座標を使って砂嵐映像をパースペクティブ変換し、背景画像のスクリーン領域に合成します。

サンプル動画の例
完成した動画では、誰もいない部屋に置かれたブラウン管テレビが映っています。
画面にはアナログ放送終了後のような砂嵐ノイズが表示され、微細なスキャンライン効果とフレームごとの輝度変動が加わることで、実際のCRTモニタに近い質感が再現されています。音声にはホワイトノイズ特有の「ザー」というノイズを音声として入れています。
- 解像度: 1280×720(HD)
- フレームレート: 30fps
- 尺: 5秒
- ファイルサイズ: 約12MB(H.264, CRF 23)
連載全体の振り返り
全7回の内容を振り返ります。
| 回 | テーマ | 要点 |
|---|---|---|
| 1 | 導入・環境構築 | ゴールと試行錯誤の全体像 |
| 2 | SDXL + OpenCV | 色指定プロンプト + HSV検出 → 限界 |
| 3 | ControlNet Canny + LoRA | テンプレート描画で配置制御 → まだ不安定 |
| 4 | Depth ControlNet + Blender | 3D空間制御で安定 → 座標確定 |
| 5 | 砂嵐生成 | 多層ノイズ映像 + ノイズ音声 + ffmpeg |
| 6 | 映像合成 | ホモグラフィ変換で画面に合成 |
| 7 | 完成・まとめ | 全パイプライン通し実行 |
第1回で提示した「AIで生成した背景画像のモニタ部分に、任意の映像を合成する」というゴールに到達しました。
得られた知見
この連載を通じて得られた、もっとも重要な知見をまとめます。
一番難しかったのは合成ではなく、座標の安定確保だった。 ホモグラフィ変換による合成処理自体は OpenCV の数行で実現できます。本当の課題は「スクリーンの四隅座標をどうやって安定して得るか」でした。
アプローチの変遷が AI+コードプロジェクトの典型パターンを示している。 第2回(HSV検出)→ 第3回(Canny ControlNet)→ 第4回(Depth ControlNet + Blender)という変遷は、最初の「明らかなアプローチ」がうまくいかず、問題の枠組み自体を変える必要があった過程です。
AIの力で、生成した画像から後処理でスクリーンを検出するのはまだ難しく、生成の段階でスクリーンの位置を制御するアプローチが現実的でした。
また、Blender は3Dモデリングと AI 画像生成の橋渡しとして強力。 Blender のヘッドレスレンダリングで ControlNet 用のデプスマップを生成するアプローチは、他の用途にも応用できます。3D空間のレイアウトを完全に制御しながら、AI による画像生成のクオリティを活用するというハイブリッド手法は非常に強力です。
今後の展望
今回のパイプラインを土台にして、さらに発展させられる方向性がいくつかあります。
- 砂嵐以外の映像コンテンツへの差し替え: 映画のワンシーンやゲーム画面など、任意の動画素材をスクリーンに合成する
- 複数スクリーンの同時表示: 部屋に複数のモニタを配置し、それぞれ異なるコンテンツを表示する
- CRTシェーダーエフェクトの追加: スキャンライン、ビネット、色収差(Chromatic Aberration)をポストプロセスで加える
- カメラの動き: 静止画の背景ではなく、カメラが移動する動的なショットへの対応
この手法は HTML/JavaScript でも応用が効くため、さまざまな発展が考えられます。下記は同じ手法でスタティックコンテンツとして実装した例です。
まとめ
全7回にわたる実験は、これで完結です。
最終的なパイプラインは Python + Blender + ComfyUI + SDXL系チェックポイント + ffmpeg というすべてオープンソースのツールで構成されています。商用ツールは一切不要です。各ステップが独立したスクリプトになっているため、特定のステップだけ差し替えることも容易です。
ここまでお読みいただき、ありがとうございました。連載の内容がなにかの参考になれば幸いです。





