1. HOME
  2. ブログ
  3. IT技術
  4. 【Unity】Google SDK規格のVRのジャイロ取得と描画速度を高速化する!

【Unity】Google SDK規格のVRのジャイロ取得と描画速度を高速化する!

Unity + Google Cardboard(グーグルカードボード)で手軽に VR 開発!

3D ゲームが従来に比べ、手軽に開発できる「Unity(ユニティ)」。

「スマートフォンアプリ」はもちろん、「Oculus(オキュラス)」などの VR ゲームの開発も行うことが出来ます。

その VR の中でも、「Google Cardboard(グーグルカードボード)」は、スマートフォンをセットするだけで楽しめるので、気軽に遊ぶことができます。

Google Cardboard で立ちはだかる「遅延問題」

「Google Cardboard」での開発は非常に簡単で、専用のソフトウェア開発キットをダウンロードして、Android アプリとしてビルドするだけです。

しかし、スマートフォンのジャイロセンサの角度の同期や、映像の調整に遅延が発生することがあります。

そして、発生後の映像の描画でも、「遅延が発生するというデメリット」があります。

そこで今回は、その遅延をなくし、快適な VR 環境を作る方法を紹介したいと思います!

こちらの記事もオススメ!

今回の Google Cardboard での開発における注意点

  1. Unity のバージョンは2018 3.14f1です。2019など、他の年のバージョンではエラーが出ることがあります
  2. その他、アセットなどの情報は2020年3月7日現在のものです。
  3. 最終的に Google SDK は一切、使わないので、Google SDK をインストールする必要はありません

【Google Cardboard 遅延の原因 その1】カメラの処理が重い

前述の通り、Google Cardboard 規格では Google SDK という専用の開発キットが用意されています。

ですが、今回は、この Google SDK は使用せずに開発を行います

遅延の原因

Cardborad 規格の VR では、Unity 内のカメラが捉えている映像を、左右の凸レンズ用に調整しています。

この調整処理に時間がかかってしまうのが、遅延の原因の1つです。

対処法 ~ カメラを手動で調整!

そこで、Unity 内に2つのカメラを設置して、直接ディスプレイに結果を表示することで、調整処理にかかる時間を回避します。

まずは以下の画像のように、ひとつの空のオブジェクト「Eyecenter」に、二つのカメラ「Main CameraL」、「Main CameraR」を子オブジェクトとしてアタッチしてください。

アタッチした二つのカメラに、パラメータを設定していきます。

カメラ「Main CameraL」の設定

「Main CameraL」は、以下のように設定してください。

ここでの、「Main CameraL」の座標は、親オブジェクトの「Eyecenter」からの相対座標です。

「Eyecenter」の Transform を、Position「0, 0, 0(原点)」、Rotation「0, 0, 0」とした相対座標になります。

また、「ViewportRect」は、2つのカメラの画像を直接重ねる、重要な部分なので、間違えないように設定してください!

カメラ「 Main CameraR 」の設定

次に、「Main CameraR」の設定をしていきます。

以下のように設定してください。

「Main CameraL」と微妙に異なる部分が多いので、気をつけてください!

Tagの部分には、「MainCamera」以外を設定してください。

ここでは「Untagged」に変更していますが、「MainCamera」以外であれば問題ありません。

Transform の Position の X、Rotation の Y には、「Main CameraL」の値の、符号を反転させた値を設定しています。

「Main CameraL」と同様に、「ViewPortRect」は大事な部分なので、間違えないように気を付けてください!

遅延対策だけでなく、拡張性もアップ!

ここまでの遅延対策では、Google SDK を使わずにカメラの調整を行っています。

Google SDK を使用していないため、様々なパラメータを自分で調整することができます。

目と目の距離に違和感がある場合は

「Main CameraL」と「Main CameraR」の、Transform と Position の X 座標を調整してみてください。

それぞれ符号は逆で、絶対値は同じ値に設定してください。

上下の動きに違和感を感じる場合は

使用者の首の長さの違いなどで、上下の角度変更の速さに違いが生じ、違和感を感じることがあります。

その場合は、Transform 内の Position Y の値を、「Main CameraR」と「Main CameraL」の値が同じになるようにして、調整してみてください。

【Google Cardboard 遅延の原因 その2】ジャイロの値とカメラの角度の同期に時間がかかる

これは、スマートフォンのスペックが低い場合に、特に気になります。

この時間差が大きいと、VR 酔いの原因になります。

対処法 ~ カメラ角度を手動で調整!

この問題も、Google SDK を使用せずに、簡単なソースコードで調整することができます。

Update 関数で、ジャイロセンサから取得した値を、直接カメラの角度に適用しています。

Update 関数の呼び出しで遅くなる場合

ここで、 Update 関数の呼び出しが多すぎて、逆に遅くなる場合があります。

そのような場合は、コルーチンなどを用いて、一定時間ごとに同期するようにして、処理頻度を調整してみてください。

こちらの問題でも、Google SDK を使わない方法で対処しているので、様々なパラメータを自分で調整することができます。

例えば、回転の角度を360度の全天球から、180度に制限するといったことが可能です。

また、コルーチンを用いた方法であれば、角度の同期時間を調整して、ゲームの場面の必要性に応じて、画面をロックすることも可能です。

さいごに

今回は、Google Cardboard 規格の VR 開発を行う上での、主な2つの遅延の原因とその対処方法について解説してみました。

Google SDK を使わないことで、とても軽い動作が実現したのではないでしょうか!

また、今回紹介した対処法では、Google SDK を使用していないため、目と目の間の距離や処理速度など、パラメータを調整することで、独自にカスタムすることも可能です。

ぜひ、自分の環境に合わせて、いろいろ調整してみてください!

(株)ライトコードは、WEB・アプリ・ゲーム開発に強い、「好きを仕事にするエンジニア集団」です。
Unityでの開発依頼・お見積もりはこちらまでお願いします。
また、Unityを扱えるエンジニアを積極採用中です!詳しくはこちらをご覧ください。

※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

こちらの記事もオススメ!

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事