Programming in VRChat

VRChat でのプログラミングについて調べたことの書き溜め

Unity の VR でのディスプレイに近いあたりの仕様について調査

(いまいちまとまりのないタイトル…)

Unity の VR 仕様まわり

Unity チュートリアルより

VRでのユーザーインターフェース - 「ワールドスペースに UI を置け」という方針とのこと

理由は、人間の眼は近過ぎる物には焦点を合わせることができないことに加え、 Unity VR が Screen Space-Overlay に対応していないからです。

VRSettings showDeviceView

VRSettings.showDeviceView

可能であれば、デバイスで表示されているものをメインディスプレイにミラーリングします。 左目のみミラーリングします。

  • VRChat の場合、これが true になっている?
  • 「可能であれば」という言い回しが微妙。どういうことなのだろう?
  • VRChat で VR の左目がデスクトップに出ているのは確認できた。
  • 「メインディスプレイ」と呼ぶのが Unity 用語としては正しいっぽい。

Single-Pass Stereo rendering

Unity マニュアル Single-Pass Stereo rendering - Single-Pass Stereo rendering 両目の一枚の画像としてレンダリングするモード - VRChat がこれになっているかは未調査 - このモードに関するシェーダーに提供されている機能の解説あり

Reddit での話題

Unity GUI elements don't show up in Vive? - UI が VR (つまり HMD)に表示されないんだけど、という質問 - 解は「ワールドスペースに UI を置け」

HMD(VR)と メインディスプレイ(デスクトップ)で別の画面を出す

Steam VR

  • Steam VR のメニューに「ディスプレイミラー」という項目がある
  • 次のようなウィンドウが現れる

f:id:naqtn:20180321201530p:plain:w400

まとめ、考察

  • スクリーンスペースの UI は HMD では Unity の環境により故意に無効にされているのだろう
  • シェーダーならば VR の視野全面に対して描画できるっぽい
    • 視差を考慮した実装も頑張ればできそう
  • スクリーンスペースの UI を表示するとメインディスプレイには表示されるらしい
    • 単なるミラー(同じものの表示)ではないということ??