Appearance
AI生成 → キルト変換パイプライン
本記事では、AI で生成した画像・動画から Looking Glass(LKG)向けのキルト画像を作成するパイプラインを体系的に解説します。 村井が複数回にわたって実施した検証結果をもとに、手順・ツール選定・品質傾向をまとめています。
概要
AI 素材から LKG キルトを作成するルートは、大きく 2 つに分かれます。
| ルート | 経路 | 特徴 |
|---|---|---|
| Route A | AI 動画 → 3DGS(Gaussian Splatting) → キルトレンダリング | 高品質な立体表現が可能。点群の生成に時間がかかる |
| Route B | AI 動画 → 連番抽出 → ffmpeg でキルト直接変換 | 手軽だがカメラワークの影響を受けやすい |
どちらのルートでも、入力となるオービット動画の品質がキルトの仕上がりを大きく左右します。 以降のセクションで、それぞれの具体的な手順を説明します。
Route A: AI動画 → 3DGS → キルト
3D Gaussian Splatting(3DGS)を経由する方法です。 動画から点群を生成し、3D レンダラーで LKG 向けキルト画像を出力します。
Step 1: 画像生成
まず、キルト化したい被写体の画像を用意します。 入力素材には以下のいずれかを使用できます。
- Stable Diffusion などの画像生成 AI で作成した画像
- 実写写真(iPhone 等で撮影したもの、商用フリー素材など)
背景がシンプルで、被写体の輪郭がはっきりしている画像が望ましいです。 遠近感を強調したい場合は、手を前に突き出すなどのポーズを意識すると効果的です。
Step 2: オービット動画の生成
用意した画像を入力として、被写体の周囲をカメラが回る「オービット動画」を AI で生成します。 以下の 2 つのサービスが実績ありです。
Runway Gen-3
- URL: https://runwayml.com/
- プロンプト例:
The 360 camera orbits around person as person stay still - カメラコントロール設定で水平回転(Horizontal)とズーム(Zoom)を調整します
- 5 秒の動画を使用してください(10 秒だと Postshot での点群生成時にエラーが出る場合があります)
Midjourney
- プロンプト例:
Orbit shot around the object, camera moves left to right, object stays still - Runway と比較して視点の数が多い動画が生成される傾向があります
- 視点が多いほど点群の品質が向上するため、Midjourney のほうが 3DGS 向きです
ポイント: Runway で生成した動画は視点数が限られ、特定方向からしか点群が生成できないことがあります。 Midjourney に切り替えたところ点群品質が大幅に改善したケースが確認されています。
Step 3: 点群生成(Postshot)
Postshot は動画から 3D Gaussian Splatting の点群を生成するソフトウェアです。
- ダウンロード: https://www.jawset.com/
- 無料ライセンスで利用可能です
手順
- Postshot をインストールして起動します
- 生成したオービット動画(5 秒版)をメイン画面にドラッグ&ドロップします
- 設定画面が表示されるので、既定値のまま処理を開始します
- 約 15 分〜2.5 時間で点群が生成されます(動画の解像度・長さにより変動)
- 左のツールバーから選択ツールを使い、散らばったアーティファクト(不要な点群)を手動で削除します
File → Export Rdnc Fieldから PLY 形式 で書き出します
注意: 点群の品質には「ガチャ要素」があります。設定値を変えて複数回試すことも想定してください。 iPhone で撮影した実写動画はデータ量が大きく、処理に 2.5 時間ほどかかる場合があります。 事前に AfterEffects で品質を少し下げておくと処理落ちを防げます。
Step 4: レンダリング
生成した PLY 点群を 3D ソフトに読み込み、LKG 向けキルト画像をレンダリングします。 2 つの方法があります。
方法 A: Blender + 3DGS Render アドオン
- アドオン: https://github.com/Kiri-Innovation/3dgs-render-blender-addon
- 対応 Blender バージョン: 4.4.3 で動作確認済み
インポート手順:
- アドオンをインストール後、シーンビュー右端のタブから
3DGS Renderを選択します Active Menu > 3DGS > Import PLY As Splatsで PLY をインポートしますActive 3DGS object > Disable Camera UpdatesをEnable Camera Updatesに変更します- カメラをセットし、カメラビューでモデルの位置を調整します
Active 3DGS object > Use Active Cameraをオンにします- 通常のキルトレンダリング手順で出力します
方法 B: Unreal Engine 5.4(推奨)
- Postshot プラグイン: インストール時に Unreal 連携にチェックを入れるだけで導入できます
- LKG プラグイン: https://lookingglassfactory.com/software/looking-glass-unreal-plugin
- UE 5.4 が両プラグインの対応バージョンです(Postshot は 5.4/5.5/5.6 対応、LKG は 5.3/5.4 対応)
セットアップ手順:
- Unreal Engine 5.4 をインストールしたあとに Postshot をインストールしてください(プラグインの都合)
- Postshot のシーンファイルを UE エディタにドラッグ&ドロップでインポートします
- インポートしたデータをシーン上に配置します
- LKG キャプチャ用カメラをシーンに追加します
- カメラ位置を調整し、LKG に接続した状態でキャプチャを実行します
品質比較: Blender 経由よりも Unreal Engine 経由のほうが画質が綺麗になることが確認されています。 Postshot の点群をそのまま高品質にレンダリングできるため、Route A では UE 5.4 を推奨します。
Route B: 動画 → 連番 → ffmpeg キルト直接変換
3DGS を経由せず、AI 動画のフレームから直接キルト画像を組み立てる方法です。 手軽に試せますが、カメラワークの品質が仕上がりに直結します。
Step 1: 動画から連番抽出
オービット動画(5 秒)を連番画像に変換します。
- AfterEffects でコンポジションに読み込み、PNG 連番として書き出します
- ffmpeg でも連番抽出は可能です
- LKG Go 標準のキルト構成では 45 フレーム(9 列 x 5 行)が必要です
動画全体を 45 フレームに間引くとカクカクする原因になります。 動画の一部区間(約 2 秒分)をそのまま 45 フレーム切り出すほうが、滑らかな結果が得られます。
Step 2: ffmpeg でキルト画像生成
ffmpeg のインストール
Windows PowerShell で以下のコマンドを実行します。
powershell
winget install --id=Gyan.FFmpeg -e基本コマンド
連番画像が入ったフォルダで以下を実行すると、キルト画像が生成されます。
bash
ffmpeg -start_number 0 -i "frame_%05d.png" \
-vf "scale=455:818:force_original_aspect_ratio=decrease,pad=455:818:(455-iw)/2:(818-ih)/2,tile=9x5,pad=4096:4096:(4096-iw)/2:(4096-ih)/2,setsar=1" \
-frames:v 1 output_qs9x5a0.56.pngパラメータの解説:
| パラメータ | 説明 |
|---|---|
-start_number 0 | 連番の開始番号 |
-i "frame_%05d.png" | 入力ファイル名(5 桁ゼロ埋め) |
scale=455:818 | 各タイルのサイズ(縦長 9:16 比) |
tile=9x5 | 9 列 x 5 行のキルト配置 |
pad=4096:4096:... | キルト全体を 4096x4096 に中央配置 |
setsar=1 | ピクセルアスペクト比を 1:1 に |
qs9x5a0.56 | LG Studio が自動認識するキルトタグ |
注意: 連番ファイルの命名規則に合わせて
-iのパターンを変更してください。
高品質版コマンド(LKG Go 向け推奨設定)
bash
ffmpeg -start_number 0 -i "frame_%05d.png" \
-vf "reverse,scale=-1:1638:force_original_aspect_ratio=decrease,crop=910:1638,tile=9x5,pad=8190:8190:(8190-iw)/2:(8190-ih)/2,setsar=1" \
-frames:v 1 output_qs9x5a0.56_rev.png高品質版では以下が異なります。
- タイルサイズが 910x1638 px に拡大
- キルト全体が 8190x8190 px
reverseフィルタでフレーム順を逆転(視差方向の調整)
ChatGPT 連携: カスタム ffmpeg コマンド生成
連番ファイルの命名規則が異なる場合や設定を変更したい場合は、以下のプロンプトテンプレートを ChatGPT(o3 推奨)に送信すると、環境に合わせた ffmpeg コマンドを自動生成できます。
text
# 目的
Windows PowerShell でそのまま実行できる ffmpeg コマンドを 2 行で出力してください。
対象は Looking Glass Go 用の静止画キルトです。
前提は下記で固定:
- 入力は 45 枚(00000〜00044)
- 1 タイル 910×1638 px(縦長 9:16)にリサイズ & 中央トリミング
- パディングなしで 9 列 × 5 行にタイル化
- キルト全体は 8190×8190 px に中央配置
- フレーム順は逆順(00044 → 00000)
- 出力ファイル名は「{basename}_qs9x5a0.56_rev.png」
# 入力
- folder_path : <<<フォルダのフルパス>>>
- first_file : <<<先頭ファイル名>>> 例) ThumbsUpGirl_00000.png
# 処理
1. first_file から basename(連番直前のアンダースコアまで)と ext(拡張子)を抽出し、
%05d 書式で連番指定を作成。
2. ffmpeg フィルタチェーン
reverse,scale=-1:1638:force_original_aspect_ratio=decrease,
crop=910:1638,tile=9x5,pad=8190:8190:(8190-iw)/2:(8190-ih)/2,setsar=1
を 1 行で組み込む。
3. 出力ファイル名は {basename}qs9x5a0.56_rev.png
4. コマンドは必ず 2 行構成にする:
Set-Location "..."
ffmpeg ...folder_path と first_file を自分の環境に合わせて書き換えて送信してください。
素材別の品質検証
Route A(3DGS 経由)での素材ごとの検証結果をまとめます。
| 素材 | 結果 | 備考 |
|---|---|---|
| AI 生成人物 | ○ | Runway / Midjourney どちらのオービット動画でも点群化に成功 |
| かき氷 | × | 細かい氷の粒の描写が AI に不得意。途中からクリーム状のテクスチャに変質する |
| タコス | ○ | 食品系でも形状が明確なものは綺麗に点群化できる |
| スニーカー(AI) | ○ | 裏側など見えない部分に破綻があるが、角度調整で見せ方を工夫すれば展示可能 |
| 実写オブジェクト | ○ | iPhone 13 で撮影 → 点群生成に約 2.5 時間かかるが品質は良好 |
品質に関する考察
- 抽象的で細かいテクスチャ(かき氷の氷粒など)は、AI 動画生成の段階で実物と乖離しやすく、結果として点群も破綻します
- 形状が明確なオブジェクト(タコス、スニーカーなど)は安定して成功します
- ガラス容器は 3DGS での再現が難しいものの、意外と形状は維持されます
- 実写素材は AI 生成素材と比較してデータ量が大きいため、処理時間への考慮が必要です
カメラワークの注意点
キルト画像の品質は、元動画のカメラワークに大きく依存します。 以下のポイントを押さえてください。
推奨: 平行移動(Linear)
LKG 公式ドキュメントによると、360 度のオービットよりもカメラの平行移動が推奨されています。
- 参照: https://docs.lookingglassfactory.com/keyconcepts/capturing-a-lightfield/linear-light-field-capture
被写体を固定し、カメラを左右に水平移動させるだけで十分です。
Runway での平行移動の注意
- Runway の仕様上、カメラは左右どちらか一方向にしか動かせません
- そのため、入力画像を意図的に見切れるように編集し、移動余地を確保する必要があります
- 完璧な平行移動を得るには複数回の生成が必要になることがあります(ガチャ要素)
移動幅の調整
- 移動幅が大きすぎると立体感が破綻します(視差が過剰になる)
- 移動幅が小さすぎるとカクカクは軽減されますが立体感が乏しくなります
- Route B(直接キルト変換)では特にこのバランスが重要です
Route A vs Route B のカメラワーク要件
| 項目 | Route A(3DGS 経由) | Route B(直接変換) |
|---|---|---|
| カメラ動作 | オービット(周回)でも可 | 平行移動が強く推奨 |
| 視点数 | 多いほど点群品質向上 | 45 フレーム分で固定 |
| カメラブレ | 点群生成で吸収される | 直接キルトに反映される |
| 推奨ツール | Midjourney(視点数が多い) | Runway でも可 |
ライセンスと所要時間
Route A(Midjourney + Postshot + UE)を標準構成とした場合のコスト・所要時間です。
| ソフトウェア | 料金 | 主な所要時間 | 備考 |
|---|---|---|---|
| Postshot | 無料 | 点群生成: 約 15 分〜2.5 時間 | https://www.jawset.com/ |
| Midjourney | $10/月(Basic プラン) | 動画生成: 約 10 分 | https://www.midjourney.com/ |
| Runway | 従量制(クレジット購入) | 動画生成: 数分 | https://runwayml.com/ |
| Unreal Engine 5.4 | 無料(条件あり) | キルト出力: 約 20 分 | 年間売上 $1M 超の場合は有料 |
| Blender | 無料 | キルト出力: 約 20 分 | UE より画質はやや劣る |
| ffmpeg | 無料 | キルト変換: 数秒 | Route B のみ使用 |
合計所要時間の目安(Route A): 素材準備を除き、動画生成〜キルト出力まで約 1〜3 時間程度です。 大半の時間は Postshot の点群生成が占めます。
まとめ
- 高品質を求める場合は Route A(AI 動画 → Postshot → UE 5.4)を選択してください。Midjourney での動画生成が点群品質の面で有利です
- 手軽に試したい場合は Route B(AI 動画 → ffmpeg 直接変換)が便利です。ただしカメラワークの調整が品質に直結するため、平行移動の設定を丁寧に行ってください
- 素材選びでは、形状が明確で表面テクスチャが均一なオブジェクトが成功しやすいです
- どちらのルートでも、LKG 公式の Linear Light Field Capture ガイドラインに沿ったカメラワークを意識することが重要です