Insta360 Air (Dual Fisheye) 向けUnityシェーダーを書いた
概要
前回このような記事を書きました。
今回は、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 のようなものが必要になるかと思います。
注意
Insta360 Airは、THETA Sとくらべてレンズ間の距離が離れているため、THETA S以上にスティッチの誤差が目立ちます。オプティカルフロー等の技術を使い、重複部分を見てずらして合わせたりする技術が存在しますが、今回はシンプルな方法(テンプレートベース)を利用しています。