(: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機器でも使えます。


実際にこのアセットを使ってポータルっぽい物を実装すると以下のような感じになります。

なお、「っぽい物」と言っているのは

「ポータルを通じて移動する」みたいな所まではやっていないからです。



ちなみに以前、Vive Stereo Rendering Toolkitを使って鏡を実装する記事も書いています。






Vive Stereo Rendering Toolkit

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

SteamVR Plugin | Integration | Unity Asset Store


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

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



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

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


その後、以下のような2色のCubeで構成したシーンを作成します。

門みたいな所にポータルを作る感じイメージです。

f:id:kan_kikuchi:20200508162543p:plain


さらにそこをワープで移動出来るようにしていますが、

ワープの実装方法については以下の記事を参照の事。




次にポータルとなるQuadを作成し、

f:id:kan_kikuchi:20200509071421j:plain


門の所にピッタリハマるように配置します。

f:id:kan_kikuchi:20200508163706j:plain


さらに子にオブジェクトを2つ(今回はOriginとAnchor)作成します。

f:id:kan_kikuchi:20200508163229j:plain


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

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

またUse Scissorからチェックを外します

f:id:kan_kikuchi:20200508164719j:plain


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

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

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

f:id:kan_kikuchi:20200508163337j:plain


最後にAnchorの場所と角度を調整してポータルに映る場所を調整します。

イメージとしてはSceneの青軸の方向が映る感じです。

f:id:kan_kikuchi:20200508163722j: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:20200508164729j:plain



双方向のポータル

先程のポータルは片方しかありませんでしたが、次は双方向のポータルの実装方法についてです。


双方向の場合はQuadを2つ用意しますが、子のオブジェクトはOriginのみにします。

f:id:kan_kikuchi:20200508165919j:plain


そしてStereo RendererのCanvas Originに自分の子のOrigin

Anchor Transformにもう片方のOriginを設定し、

Ignore When Renderにもう片方のQuadを設定します。

f:id:kan_kikuchi:20200508170015j:plain


すると、どちらでも覗ける双方向のポータルが出来ます。



ただし、カメラ等が衝突してもすり抜けるので

「ポータルを通じて移動する」みたいな事は出来ていません。


一応Two-Way Portalというサンプルがそれっぽいのですが、

f:id:kan_kikuchi:20200508171719j:plain


自分の環境では上手く動作しなかったので、

完全なポータルの実装についてはまた別の機会に挑戦してみようかと思います。

(それっぽいアセットは何個かあったのでそれを試す感じになるかも)

Pocket Portal VR | Particles/Effects | Unity Asset Store



参考