(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]



Vive Stereo Rendering Toolkitを使って(Steam)VRで鏡を実装【Unity】【Steam】【VR】【アセット】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2018.4.20f1
Vive Stereo Rendering Toolkit 1.1.2


はじめに

今回はVive Stereo Rendering Toolkitという無料のアセットを使って、

Unityで開発しているVRゲームに鏡を実装するという話です!

Vive Stereo Rendering Toolkit | Particles/Effects | Unity Asset Store


VRゲームは両目、つまり2つのカメラを使っているので、

普通のシェーダーが上手く機能しない事も多いですが

このアセットは名前の通りステレオのレンダリングに対応しています。

なおViveと付いていますがOculus Rift等の他のVR機器でも使えます。


実際にこのアセットを使って鏡を実装すると以下のような感じになります。



ちなみに鏡以外にポータル(どこでもドア的なの)も実装出来るらしいので、

それもいずれ記事にしたいと思います……!記事にしました!




余談ですが、VR以外で鏡を実装したい場合は

Mirror Shadersというアセットが簡単に実装出来てオススメです。

(ただしVR = ステレオレンダリングには非対応)

Mirror Shaders | VFX Shaders | Unity Asset Store


Vive Stereo Rendering Toolkit

まずSteam VR Pluginを使って、UnityでVRでの操作を実装します。

SteamVR Plugin | Integration | Unity Asset Store


実装と言ってもアセットをインストールしてシーンを再生するぐらいで終わります。

詳しくは以前に導入記事を書いているので、そちらを参考にしてみてください。



以下のような感じでVR上で動けるようになっていればOKです。

f:id:kan_kikuchi:20190114181924g:plain:w800


今回はこのSteam VR PluginのサンプルであるInteractions_Exampleに鏡を実装していきます。

f:id:kan_kikuchi:20200504072207j:plain


まず鏡となるQuadを作成し、PositionとScaleを好きなように設定します。

f:id:kan_kikuchi:20200504072147j:plain


さらに子にオブジェクト(今回はOrigin)を作成し、Rotationのxを270にします。

f:id:kan_kikuchi:20200504075031j:plain


次にQuadにStereo RendererというコンポーネントをAddし、

そのCanvas OriginとAnchor Transform に子のオブジェクトを追加します。

またUse Scissorからチェックを外しIsMirrorにチェックを入れます

f:id:kan_kikuchi:20200504072552j:plain


さらにStereo Rendere追加時に自動で生成される

Stereo Camera Eye [Quad]のClipping PlanesをのNearを小さい値にします。

(これで鏡に近づいた時に映った物の表示おかしくなるのを防げる)

f:id:kan_kikuchi:20200504073734j:plain


Hierarchyでの設定は以上ですが、現時点で上手く動作しない場合があります。(Unityのバージョンによる)

そんな時はプログラムの修正をしていきます。


具体的にはSteamVRParamFactory.cs

f:id:kan_kikuchi:20200504073330j:plain


using Valve.VRを追記し、#ifと#endifをコメントアウトします。

f:id:kan_kikuchi:20200504073420j:plain


さらにDeviceType.cs

f:id:kan_kikuchi:20200504072822j:plain


InitParamFactory内にある以下の場所をコメントアウトします。

f:id:kan_kikuchi:20200504074118j:plain


これで、最初の動画のような状態になります。



なお、Ignore When Renderer

レンダラーが付いたオブジェクトを設定すると、そのオブジェクトは鏡に映らなくなります。

f:id:kan_kikuchi:20200504073657j:plain



参考