Insta360 Air (Dual Fisheye) 向けUnityシェーダーを書いた

概要

前回このような記事を書きました。

hammmm.hatenablog.com

今回は、Unity3Dを使ってInsta360 AirからのUSB経由の映像を球体にマップして見ることができるよう、シェーダーを作りました。

なお、Windows/Mac上でInsta360 Airからの映像を使いたいというだけであれば、今回のシェーダーがなくても、公式のスティッチソフトウェア(※)を使えば、最初からEquirectangulae形式での出力が可能になります。そちらのほうがスティッチ精度は高いでしょうし、特別なシェーダーも不要です。USBカメラと同じ方法で取り込むことができるはずです。

GearVRで使いたいとか、ネット経由で使いたいとか、遅延を可能な限り減らしたいとか、そういった用途の方には役に立つのではないかと思います。

制限事項としては、単純なスティッチ(合成)方法のため、つなぎ目が距離によって非常に目立ちます。

https://www.insta360.com/download/insta360-air こちらの “Webcam Software”

詳細

Insta360 AirのDual Fisheye形式 を Equirectangular形式 に変換して球体にマップするシェーダーを作りました。

Noraさんの ThetaShaderPack をベースにしています。ありがとうございます!いろいろ変更した結果だいぶコードが異なってきています。

シェーダー本体は これ です。

Insta360 Airの Dual Fisheyeは、おおまかにはTHETA Sと同様ですが、レイアウトが多少異なります。

  • Insta360 Airでは、映像の縦横比が 1:2 となっており余白はありません。
  • 中央で左右に分割すると、それぞれのセンサーの画像になります。
  • 各センサー画像において、Dual Fisheye画像での下のほうがカメラの下方向になります。 (THETA Sとは異なる)
  • 各FishEye画像を4度程度回転させて扱わないときっちりあわないようです。 (センサーが傾いて設置されている?)

同じシェーダで THETA S と Insta360 Air に両対応するようにしています。シェーダのパラメータで機種を選べます。 内部のパラメータをいじれば他のDual Fisheyeにも対応できるだろうと思います。

動作検証端末

ダウンロード

https://bitbucket.org/mhama/thetaoculuslivestreaming/downloads/

使い方

  • Unity3Dでプロジェクトを開いてください。
  • Unityで、Assets/ThetaLiveStreaming/Scenes/SimpleInsta360AirStreaming.unity を開いてください。
  • Insta360 AirをUSBポートにつないでください(※)
  • Playしてください

これでInsta360 Airからの映像がゲームビューに表示されると思います。

※ 最近出荷分のInsta360 AirにはUSBケーブルが入っていないという話を聞きます。その場合、PCにつなぐには、 カモン MBA-L01 USB(2.0) microB(メス)-A(オス)L型変換ケーブル(左向き) 0.1m のようなものが必要になるかと思います。

f:id:hammm:20170528013117j:plain:w600

注意

Insta360 Airは、THETA Sとくらべてレンズ間の距離が離れているため、THETA S以上にスティッチの誤差が目立ちます。オプティカルフロー等の技術を使い、重複部分を見てずらして合わせたりする技術が存在しますが、今回はシンプルな方法(テンプレートベース)を利用しています。