ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

UnityとHTC Viveで鏡を作る方法

はじめに

こんにちは!VR事業部の長谷川(id:waffle_maker)です。

Unity 5.4から、SteamVRでReflection(反射)とRefraction(屈折)が正しく表示されず、非常にハマりました。

どうやら、CameraのTarget EyeをBothにした場合に、シェーダー側がそれに対応していないとダメみたいです。

今回はUnityとSteamVRで水…ではなく、鏡を表示する方法について紹介します。

バージョン情報など

各種バージョン情報は以下の通りです。

HTC Viveの購入はこちら

実際に試してみる

  1. 新規プロジェクトを作成し、SteamVR PluginとThe Lab Rendererをインポートします。
  2. Main Cameraを削除し、[CameraRig]プレハブをシーンに配置します。
  3. [ここ](https://forum.unity3d.com/threads/reflection-rendering-wrong-in-openvr-htc-vive.398756/#post-2726226)からMirror.unitypackageをダウンロードし、インポートします。 thank you! dan-kroymann.
  4. Mirror.csでエラーが発生するので、GetProjectionMatrixメソッドの第3引数を削除します。
    Valve.VR.HmdMatrix44_t proj = SteamVR.instance.hmd.GetProjectionMatrix(eye, cam.nearClipPlane, cam.farClipPlane, SteamVR.instance.graphicsAPI);
    
    Valve.VR.HmdMatrix44_t proj = SteamVR.instance.hmd.GetProjectionMatrix(eye, cam.nearClipPlane, cam.farClipPlane);
    
  5. Mirrorプレハブをシーンに配置します。 やったー!できたー! f:id:waffle_maker:20170503042723p:plain ※VRで見ないと分からないですよね…

まとめ

自分自身のアバターを表示するVRコンテンツでは、鏡を表示することで自分自身がその世界に居ると認識させることが出来ると思います。

鏡は軽い処理ではありませんが、導入部分などで鏡を見せることで没入感を高めることが出来ると思います。

是非活用してみて下さい!