Edited at

UnityアプリでTHETA Vの画像を天頂補正する方法


はじめに


  • THETA Vの静止画から角度情報を取得して画像を正しい向きにする(天頂補正)際に実施した内容(回転編)


    • Unityアプリでの使用を前提としています




概要


  • THETA Vの静止画に含まれている角度情報(Pitch, Roll)は、Sphereに貼り付けたEqui画像を正しい向きにするために回転をするための情報

  • この角度情報をどのように使えばよいか(どの軸に対してどの順番でどの向きで回転)書いている場所がない(見つけられなかった?)ので成功するパターンを記述しておきます


    • 利用するSphereや向き、テクスチャに応じて条件は変わります




前提条件

(前提条件が変わると正しい結果にならないので注意してください)


  • Sphere100を使用



  • Sphere100のパラメータ


    • Position(x:0、y:0、z:0)(中心)

    • Rotation(x:0、y:0、z:0)(回転させない。初期向きが変わると成立しない)

    • Scale(x:-100、y:100、z:100)(大きさは任意。x軸がマイナスなのは反転した画像を正しくするため)




PitchとRollの回転順序と向き


  • Pitchをz軸で値をマイナス反転して回転 → Rollをx軸で回転


実際のコード


Sphere100に画像の貼り付けと天頂補正を行っている部分


// _mainScreen:Sphere100のGameObject
// _tex:全天球画像をテクスチャにしたもの
// _pitch:取得した角度情報(pitch)
// _roll:取得した角度情報(roll)

public void ShowMainScreen()
{
_mainScreen.GetComponent<Renderer>().material.mainTexture = _tex;

setMainScreenZenith();
}

void setMainScreenZenith() {
_mainScreen.transform.rotation = new Quaternion(0.0f, 0.0f, 0.0f, 0.0f);

_mainScreen.transform.Rotate(new Vector3(0, 0, 1), -_pitch);
_mainScreen.transform.Rotate(new Vector3(1, 0, 0), _roll);
}



  • 実際には、元テクスチャの破棄などを行っていますが必要な部分だけ残しました


さいごに


  • テストする際はTHETAの向きを全方位にして確認したほうが良いです


    • 全方位(8方位)


      • 本体縦・正常向き/逆さ向き

      • 本体横・レンズ左右・シャッターボタン手前・電源ボタン上/下

      • 本体横・レンズ左右・シャッターボタン奥・電源ボタン上/下

      • 本体横・レンズ上下・ボタン上/ボタン下



    • 一部の方位は正しい向きになる(ようにみえる)けど、他の方位で成功しないというパターンが多々あり頭を抱えました




さいごのさいごに


  • (こんな苦労するなら)使用するTHETA画像は天頂補正済を使用するほうがいいですw


参考資料