Appearance
VR180→LKG表示
概要
VR180(SBS形式の2視点VR動画)を Looking Glass(LKG)ディスプレイに裸眼立体視表示するためのパイプラインについてまとめた記事です。本記事では、2つのアプローチを統合して解説します。
- VR180→LKG直接表示パイプライン -- Unity上でVR180動画をQuilt変換してLKGへ出力する方法
- Lifecast LDI3パイプライン -- VR180をLifecast Volumetric Video Editorで LDI3(Layered Depth Image 3-layer)に変換し、LKGで再生する方法
VR180のLKG表示は近年引き合いが増えており、製品化を目指す動きも出てきています。VR180は左右2視点のみですが、LKGは多視点(45視点以上)のQuilt画像を必要とするため、視差の補完処理が重要な技術課題となります。
元記事
- VR180→LKG表示(一旦停止版)(水上)
- Lifecast(LDI3&LKG)(水上)
参考資料
- VR180動画をLookingGlassで裸眼立体視する(Speaker Deck / nkjzm)
- GitHub - nkjzm/LKGVR180Player
- Lifecast Volumetric Video Editor
VR180→LKG表示パイプライン
VR180動画をUnity上でLKGに表示するための基本フローは、大きく3ステップで構成されます。nkjzm氏のSpeaker Deck資料が基本設計の参考になります。
全体フロー(3ステップ)
VR180動画(SBS) → 左右平行投影 → SBSテクスチャ合成 → Quilt描画 → LKG出力| ステップ | 処理内容 | 備考 |
|---|---|---|
| 1. VR180→左右視点の平行投影 | 半球メッシュにVR180動画を貼り、球の中心から左右視点をRenderTextureへ描画します | IPD相当のオフセットで配置 |
| 2. 左右画像をSBS合成 | 2枚のRenderTextureをCanvas等で横並び1枚のテクスチャにまとめます | LKG推奨解像度に合わせます |
| 3. LKGへQuilt描画 | HoloPlay CaptureまたはQuiltクラスにSBSテクスチャを渡して表示します | SDK3ではQuiltクラスを使用 |
実装のポイント(Unity想定)
ステップ1: VR180を平行投影して左右テクスチャ化
- 半球メッシュの作成: 半球(内面)にVR180動画(equirectangularまたは魚眼投影)を貼り付けます
- 視点配置: 球の原点に左右カメラを配置します。IPD相当のオフセット(約65mm)を設けます
- RenderTexture出力: 各カメラの出力先にRenderTexture(L/R)を割り当てます
- メタ情報の確認: VR180のメタデータを確認してデコード・投影を調整します
VideoPlayer → RenderTexture → 半球メッシュ(内面)
├── カメラL(-IPD/2) → RenderTexture_L
└── カメラR(+IPD/2) → RenderTexture_Rステップ2: 左右画像をSBSへ合成
- Canvas構成: RawImage等でL/RのRenderTextureを左右にレイアウトし、もう一段のカメラで1枚のSBSテクスチャに書き出します
- 縦横比の調整: LKGの推奨解像度(Quilt設定)に合わせ、ピクセル単位で正確に調整します
ステップ3: QuiltでLKGに表示
- HoloPlay Capture(簡易版): プレハブをシーンに配置し、Override/Custom QuiltにSBSテクスチャを指定します
- Quiltクラス(柔軟版): コードから
tilingを設定し、overrideQuiltにSBSテクスチャを渡してSetupQuilt()を呼びます
操作仕様
| キー | 動作 |
|---|---|
a | 動画ロード(StandaloneFileBrowser)、ロード完了で即再生・ループ |
Space | 一時停止/再生切り替え |
| 起動時 | LKGディスプレイで自動フルスクリーン |
GitHubリポジトリの検証
nkjzm氏の LKGVR180Player を試みましたが、ライセンスエラーが発生しプロジェクトを開けませんでした。基本方針は資料通りで進めています。
Lifecast LDI3パイプライン
Lifecast Volumetric Video Editorを使用して、VR180動画をLDI3(Layered Depth Image、3レイヤー)に変換し、LKGで立体視再生する方法です。
VR180→LDI3変換手順
Lifecast Volumetric Video Editor で変換を行います。
1. フォルダ作成
作成したいLDI3ごとにフォルダを新規作成します。作成したフォルダを選択するとメイン画面に遷移します。
2. VR180→LDI3変換
左上の「File」から「Import VR180, Render LDI3」を選択します。
- カメラ間距離の入力: 撮影カメラのIPDを入力します(例: Kandao VR Cam → 65mm)
- ストレージ要件: 40秒の動画で約20〜40GBの容量が必要です
- 変換時間: GPUの性能により1〜4時間ほどかかります
- Pro License: 90秒以上のVR180にはPro Licenseが必要です
変換成功後、左側に平面映像、右側にLDI3立体視映像がプレビューされます。
3. LDI3 Videoの保存
LDI3 Videoのエンコードにはffmpegが必要です。Lifecast内に同梱されていないため手動で配置します。
- gyan.dev からffmpegをダウンロード・解凍します
ffmpeg.exeをLifecastのインストールディレクトリにコピーします- 「File」→「Encode Compressed LDI3 Video」→「Apply」で動画作成を開始します
注意
チェック欄は必要なもののみ選択してください。デフォルトだと計4本の動画が作成されます。
LDI3プレイヤー(Web版)
必要なツール: git, Node.js(npm付き)
bash
# 1. 作業用フォルダの作成・移動(初回のみ)
md C:\work
cd /d C:\work
# 2. リポジトリのクローン(初回のみ)
git clone https://github.com/fbriggs/lifecast_public.git
cd lifecast_public
# 3. 指定コミットにチェックアウト
git checkout b336c7cc34fabf9371d1509bc9feb7841e9f0099
cd web
# 4. http-serverのインストール(初回のみ)・起動
npm install -g http-server
http-server -p 8080LKGディスプレイを接続し、Looking Glass Bridgeの起動を確認した上で、Chromeで http://localhost:8080/looking_glass.html を開き「START LOOKING GLASS」を押すと表示されます。
表示するLDI3の変更: lifecast_public\web\media にファイルを保存し、looking_glass.html 内の _media_urls を編集します。
javascript
_media_urls: ["media/(保存したデータ名).mp4"]LDI3プレイヤー(Unity版)
Unity 2021.3.1f1で動作確認済みです。
ダウンロード: Lifecast_LDI3_Player_Unity1.0.zip
1. LifecastVideoRenderTextureの適用
Assets/Lifecast_LDI3_Player/Material にある3つのMaterialのTextureを LifecastVideoRenderTexture に変更します(デフォルトはldiなので注意)。
LifecastLDI3_layer0_material/layer1_material/layer2_material
2. LDI3 Videoの選択: Scene内の LifecastVideoPlayer のVideoPlayer Sourceを設定します。
3. 実行: 再生するとWeb版よりも良好な立体視表示が得られます。
2つのアプローチの比較
| 項目 | VR180直接表示 | Lifecast LDI3 |
|---|---|---|
| 前処理 | 不要(リアルタイム) | VR180→LDI3変換(1〜4時間) |
| ストレージ | 元動画のみ | 40秒で20〜40GB |
| 視差の質 | 2視点のみ(補完が必要) | 3レイヤー深度で多視点生成 |
| SDK依存 | LKG SDK(SDK4で課題あり) | Web版はBridgeのみ、Unity版はSDK不要 |
| 立体視品質 | 視差が限定的 | Web版よりUnity版が良好 |
SDK4への移行課題
VR180→LKG直接表示パイプラインにおいて、LKG SDK4への移行は大きな技術課題です。
SDK3→SDK4の主な変更点
| SDK3 | SDK4 | 影響 |
|---|---|---|
HologramCamera | 削除 | 多視点レンダリング制御が不可に |
Quiltクラス | 削除 | SBSテクスチャの直接描画パスが消失 |
SetupQuilt() | なし | Quilt設定のプログラマティック制御不可 |
発生している問題
- HologramCameraの消失: 従来の多視点レンダリングの仕組みが使えません
- Quiltクラスの削除: 代替システムの作製が必要です
- 2視差の制限: 視差の補完を別途行う必要があります
SDK4での代替アプローチ(検討中)
VR180平行投影
→ VideoPlayer → RenderTexture → 半球メッシュ(内面)
→ SBSの左半分/右半分で左右視点のテクスチャ参照を実装
2視点テクスチャ化
→ 最小構成では動画のSBSをそのまま利用
表示(SDK4描画)
→ HologramCameraではなくSDK4の最終パスでLKGへ出力
→ 新方式の標準レンダリングに載せ替えAI支援を活用して代替案を模索中ですが、HologramCameraがある前提で提案されることが多く、SDK4ネイティブの解決策の発見に時間がかかっています。
進捗状況
VR180直接表示パイプラインはSDK4移行の困難により一旦停止しています。Lifecast LDI3パイプラインはSDKに依存しないWeb版プレイヤーが利用可能であり、現時点ではこちらが実用的な選択肢です。
AI補完
AI補完
以下はAIによる補足情報です。元の作業記録には含まれていない技術的背景を補完しています。
VR180フォーマットとSBSステレオスコピーの仕組み
VR180はGoogleが2017年に提唱した没入型映像フォーマットです。前方180度の視野角をカバーし、左右2つのカメラで撮影したステレオ映像を記録します。
SBS(Side-by-Side)方式では、左目用・右目用映像を1フレーム内に横並びで格納します。
┌────────────────────────────┐
│ 左目用映像 │ 右目用映像 │ ← 1フレームに2視点を格納
│ (Left Eye) │ (Right Eye) │
│ W/2 x H │ W/2 x H │
└────────────────────────────┘投影方式は主にEquirectangular(緯度経度マッピング)とFisheye(魚眼)の2種類があります。
ステレオペアからの深度推定
VR180の左右映像からステレオマッチングで深度情報を推定できます。視差と深度の関係式は以下の通りです。
depth = (focal_length x baseline) / disparityfocal_length: カメラの焦点距離baseline: 左右カメラの間隔(IPD)。Kandao VR Camの場合は65mmdisparity: 左右画像間の対応点のピクセルずれ量
アルゴリズムは従来型のSGBMからディープラーニングベースのRAFT-Stereo等まで多様です。Lifecastは独自の深度推定パイプラインで3レイヤーの深度分離を行います。
LDI3フォーマットの利点
LDI3は、単一視点RGBD画像が持つ遮蔽問題(オクルージョン)を3レイヤー構造で緩和します。
Layer 0: 最前面(前景オブジェクト)
Layer 1: 中間面(中景の構造)
Layer 2: 最背面(背景環境)各レイヤーがRGBと深度の両方を保持するため、視点移動時に前景がずれても背面レイヤーで穴を埋められます。LKGの45視点以上のQuilt生成において、この多層構造が視差補完の品質を大きく向上させます。
代替アプローチ
本記事の2パイプライン以外にも、以下のアプローチが存在します。
- RGBD動画方式: AI深度推定(Depth Anything V2等)で深度マップを生成しLKGに入力します。リアルタイム処理が可能ですが、オクルージョン問題が残ります
- NeRF方式: 少数視点から3次元ニューラル表現を学習し任意視点を生成します。高品質ですが学習に時間がかかりリアルタイム動画には不向きです
- 3D Gaussian Splatting方式: NeRFよりレンダリングが高速ですが、2視点のみからの再構成精度には限界があります
- MPI方式: 複数の平面レイヤーにRGBA情報を格納する方式で、LDI3の一般化と言えます。レイヤー数増加で品質向上しますがコストも増加します
現時点では、Lifecast LDI3が前処理コストと表示品質のバランスに優れた選択肢です。
Author: 水上 | AI Enhanced: この記事はAIによる補完情報を含みます