iOS版 iPhone XシリーズでVR Viewの立体視ができない
VR View (Dual Lens)の左目用と右目用の描画領域を、単純にスクリーンの二分割にしており、 瞳孔間距離を考慮していなかったため。
iPhone Xシリーズは、ランドスケープのとき以前のiPhoneよりもスクリーンが横長になり、 左目用画像の中心と右目用画像の中心の距離が、瞳孔間距離よりも長くなってしまう。 iPhone 7 Plusは、ランドスケープでスクリーンの横幅が約12cmあり、 左目用画像の中心と右目用画像の中心の距離が約6cmで、瞳孔間距離に近いサイズだったため、 たまたま立体視できていた。
瞳孔間距離を考慮して左目用と右目用の描画領域の横幅を以下の図のように調整する。
|-------------w-------------| | |---IPD---| | +---+----+----+----+----+---+-- | | | | | | | | | | | | | | L | R | | h | | | | | | | | | | | | +---+---------+---------+---+-- |---IPD---|---IPD---| IPD: 瞳孔間距離(Interpupillary distance) w: スクリーンの横サイズ h: スクリーンの縦サイズIPDの2倍がスクリーンの横サイズを超える場合は、左目用と右目用の描画領域はスクリーンを単純に二分割する。
VRグラスの瞳孔間距離を実測した結果は以下の通り。
またPSVRのデフォルトの瞳孔間距離は63mmである。
以上の情報から、瞳孔間距離のデフォルト値は63mmとする。 瞳孔間距離の設定変更は次期課題とする。
瞳孔間距離を考慮して左目用と右目用の描画領域を算出するために、 スクリーンのピクセル密度を把握する必要がある。 iOSのAPIを用いてピクセル密度を取得する手段はないため、 iPhoneの機種ごとのピクセル密度をプログラム内に保持する。 画面サイズからiPhoneの機種を判別し、ピクセル密度を求める。
メンバにインチあたりのピクセル数(m_PixcelsPerInch)を追加。 メンバにポイントあたりの長さ(m_MmPerPoint)を追加(単位はmm)。
セーフエリア情報初期化とPPI情報初期化のメソッド呼び出しに変更。 変更前の処理内容は_InitializeSafeAreaに移動。
セーフエリア情報初期化メソッドを追加。 Initializeの処理内容を本メソッドに移動。
PPI情報初期化メソッドを追加。
1インチあたりのピクセル数取得メソッドを追加。
1ポイントあたりの長さ(mm)取得メソッドを追加。
メンバに瞳孔間距離ポイント数(m_IPDPoints)を追加。
メンバに瞳孔間距離ポイント数初期化処理を追加。
シーンレンダリング処理呼び出しの引数に瞳孔間距離を追加。 VR用パラメータ初期化メソッド呼び出しを追加。
シーンレンダリング処理呼び出しの引数に瞳孔間距離を追加。
VR用パラメータ初期化メソッドを追加。 メンバに瞳孔間距離ポイント数の算出処理を実装。
メソッド引数に瞳孔間距離ポイント数を追加。 VR View(Dual Lens)が指定された場合に、瞳孔間距離を考慮して、 左目用と右目用の描画領域の横幅を調整する処理を追加。
iPhone XRをVRグラスに装着して、VR View (Dual Lens)の画面を見たが、立体視できない。 iPhone 7 Plusでは立体視できていた。