2枚の平面画像をパノラマ化してMeta Questで立体視 (その1 概要編)


この記事では、右目用・左目用がセットになった画像をMeta Questの標準の画像ビューアで立体視するテクニックをお伝えする。

立体視のしくみ

こちらは、左右にちょっとずらした所から撮影した写真だ。左の写真を左目で、右の写真を右目で見ることで、立体的に鑑賞することができる。

立体視の仕組みは簡単。ヒトは左右の目で少し異なる風景を見ることで空間を把握している。それを再現するため、撮影地点をずらして「左目から見た風景」の画像と「右目から見た風景」の画像を作成し、左目画像を左目で、右目画像を右目で見ると立体的に見えるのだ。

「立体視できる写真」は、ふつうのカメラやスマホのカメラでも簡単に撮れる。まず1枚写真を撮り、少し左右にずらした場所からもう1枚撮れば、右目・左目画像のセットのできあがりだ。

ヒトの目は6〜7cm離れているので、それと同じくらいずらして撮影すれば自然な遠近感が得られる。撮影ポイントを数十センチずらして撮れば、それは人間よりも大きな生き物が見た風景となり、ミニチュアっぽく鑑賞できる。逆に、撮影地点のずれを1〜2cm程度にして撮影すると、こんどは自分が小さくなってミニチュアの世界に入り込んだような体験ができる。

Meta Questの画像ビューアで見ようと思ったら……

さて、Meta Questの標準の画像ビューアでは、平面の画像だけでなく、パノラマ画像やパノラマ立体視画像が見られる。しかしながら、サポートされているのは

  • ふつうの平面画像
  • 360°パノラマ画像 (全周パノラマ)
  • 180°パノラマ画像 (前方のみ、半球パノラマ)
  • 360°パノラマ3D画像 (右目用の画像と左目用の画像を組み合わせた、立体視できるパノラマ)

の4種類だ。

「パノラマじゃない立体視画像」はそのままでは見ることができない。

パノラマへの変換

そこで、どうにかして「パノラマじゃない写真」のセットを強引に「360 3D」の形式に変換し、標準のビューアで見ることにした。

Meta Questの標準ブラウザがサポートしている360°パノラマ画像は、Equirectangular (正距円筒図法) だ。極座標をそのまま直交座標にした形になっている。

そして、360°パノラマ3D画像は、左目用のパノラマを上に、右目用のパノラマを下に単純に並べた形式となっている。

この形式で眺められるようにするには、仮想の3D空間に「パノラマじゃない写真」をポスターのように設置した、こちらの画像のようなシーンを仮想のパノラマカメラで撮影し、パノラマ画像にしてしまえばいい。

画像生成の流れはこうなる。

でき上がった画像をVRで見ると、「パノラマじゃない写真」が置かれた空間に自分が没入することができるというわけだ。広角レンズで撮った写真ならば、視野の大部分が埋まり、迫力のある体験ができる。

出来上がった画像はこちら(10.3MBあります) 。

Meta Questで開く

こちらは鑑賞している様子のキャプチャ。これが実際には立体的に見えている。

作り方概要

今回紹介する技は2パターンある。

  • Blenderを使って「画像を置いた3D空間」を作成してレンダリング
    • Blenderを使ったことのある人なら簡単。使ったことがなくても、最初だけちょっと頑張ればなんとかなる
    • 1セット作るごとに手間がかかるので大量生産や試行錯誤には向かないかも
    • 画角の調整が面倒
    • 画質はかなり良くなる
    • Blenderデータ一式をzipで置いておくので、中身の画像ファイルだけすりかえればすぐに作れる
  • Pythonで画像をパノラマ画像にマッピングする
    • コードは置いとくので使ってね
    • numpy, cv2を使うので、環境によっては準備が必要
    • コマンドラインから1セット数秒〜数十秒で生成できるので、大量生産・試行錯誤も簡単
    • 画角や出力サイズもオプションで簡単に変えられる
    • ちょっと画質は落ちる。工夫するともうちょっと良くなるかもしれない

それぞれの方法の詳しいやり方を書こうとしたらちょっと長くなってしまった。別記事にしたので、試してみたい方を読んでみてほしい。

鑑賞

Meta Questで鑑賞するには、できあがった画像を何らかの方法でヘッドセットに送り込む必要がある。ブラウザ経由でダウンロードして保存できるようにするのがいちばん楽だ。たとえば、次のようなやり方がある。

  • Google DriveやDropboxにファイルをアップロードする
  • ローカルにHTTPサーバを立てる
    • Pythonなら python -m http.server 8080のような感じ
    • Node.jsならnpmでhttp-serverをインストールして http-server . でOK

URLをブラウザに手打ちするのはちょっと大変なので、Meta Questヘッドセットに簡単にURLを送るブックマークレットもぜひ活用してほしい。

画像を表示したらトリガー長押しで ”Download Image” というメニューが出るので、ローカルに保存する。そして、”Files” で画像を選び、”Projection” を “360 3D” にすると、立体視することができる。