Top/Devel/OculusRift/VR酔いの軽減

VR酔いの軽減はてなブックマーク

sick_memai.png

バーチャルリアリティアプリの天敵、VR酔い。


はじめてのVR体験で酔ってしまった方は、たとえ別のアプリでもVR体験自体を避けるようになってしまうかも。

このページではその軽減を目指します。

主な参考資料

VR酔いの軽減に効きそうなこと (独自調査のため、誤っているかもしれません)

性能

  • VRヘッドセット毎に設定されているフレームレートが出るようにチューニングする。
    (Oculus Rift DK2/Gear VRなら75fps、Oculus Rift CV1/HTC Viveなら90fps)
    • Oculus Utilities for Unity使用時はOVRDebugInfo.csをアタッチすると、再生時にスペースキーでフレームレートが表示されるので簡易確認に便利。
    • より詳細な内容は、Unityであれば、[Window]>[Profiler]にて確認できる。
    • ポリゴン数を減らす。
    • 【Unity】基本的に参照はキャッシュする。(例:都度GameObjectをFindするような実装は避ける。)
    • 【Unity】ライトマップをベイクする。
    • 【Unity】半透明を使わない。
    • 【Unity】オクルージョンカリングを使う。
    • 【Unity】メッシュを結合する。(広範囲に結合するとオクルージョンカリングに悪影響がある)
    • 【Unity】動かないオブジェクトはStaticを有効にする。

移動

  • 移動は等速直線運動。加減速は控える。必要な場合は徐々にでなく瞬間的に行う。
    • 実装例:Showdown (低速の等速直線運動。なお、このトレーラーでは勝手に視界が回転しているように見えますが、実際は回転はユーザー任せです。)
  • 加減速はできる限りユーザーの操作によるものとする。
  • 視界の振動などの演出は行わない。(歩行演出など)
  • ユーザーの視線方向以外への方向への移動は避ける。(移動方向へユーザーの視線を誘導するという解もある?)
  • どのように動くかあらかじめ分かるようにする。(例:ジェットコースターのレール)
  • ワープは酔いづらいという説もあるため、導入を検討する。

回転

表示

  • ユーザーの頭の動きと連動しない全画面表示やHUDは避ける。
    2016.04.19訂正:ユーザーの頭の動きと連動する全画面表示やHUDは避ける。
  • 視界に入るように固定物を表示する。
    (例:操縦桿、窓枠など。「視界に物体を固定する」ではなく、「視界に固定物が入るようにする」であることに注意。HUDではない。)

視点

  • 一人称視点と三人称視点では三人称視点の方が酔いづらい。一人称視点の必然性があるかを検討する。
  • 体験する際の視点の高さにカメラの位置を合わせる。
    例えばOculus Utilities for Unityなら、1.3.0からTracking Origin Typeが選べるので適切な値に設定する。(Eye Level or Floor Level)

視野

  • 周辺視野を制限すると酔いづらいという研究結果もあるため、導入を検討する。
    • 参考文献:(噂は耳にするものの見つけられていないので、どなたか教えてください (^^;
    • 実装例:Eagle Flight (7分28秒辺りからの遠くに映っているモニタを映像を見てください)

高速移動時の周辺視野を制限するスクリプト(β) Permalinkはてなブックマーク

概要

プレイヤー自身が静止しているにもかかわらず、バーチャルリアリティヘッドセットの画面内では風景が動いて見える場合、
ベクション(視覚誘導性自己運動感覚)によるVR酔いが生じることがあります。
これはジェットコースター系VRアプリなどで顕著です。


本スクリプトでは、高速移動時の周辺視野をマスクで制限することによって、
ベクションによるVR酔いの軽減を目指してみます。


あくまでも実験的スクリプトですので、効果がない、あるいは逆効果であることも考えられます。
ご利用にあたってはご注意ください。


ダウンロード

使用方法

  1. UnityのGitHubからPost-processing Stackをダウンロードし、インポートする。
  2. Unityのメニューから[Asset]>[Import Package]>[Custom Package]と選択し、 mask_peripheral_vision.unitypackageをインポートする。
  3. OVRCameraRig/TrackingSpace/CenterEyeAnchorにMaskPeripheralVision.csをAddする。
  4. 速度の変化が生じたら、以下のようにChangeMaskSizeメソッドを呼ぶように、ご自身のスクリプトを修正する。
    GameObject mask = GameObject.Find("OVRCameraRig/TrackingSpace/CenterEyeAnchor");
    mask.GetComponent<MaskPeripheralVision>().ChangeMaskSize(speed);
  5. MaskPeripheralVision.csの値を調整する。
    項目説明
    Min Speed With Maskマスクがかかり始める最小の速度
    Max Speed With Maskマスクがかかる最大の速度
    Mask Strengthマスクの強度[%]
    Smoothnessどのくらい滑らかにマスクの強度を変化させるか
  6. [Play]ボタンをクリックする。

Amazon

差分 一覧