ぼっちプログラマのメモ

UE4とかUE5とかについて書いたり書かなかったり。

Stereo Layerコンポーネントについて

はじめに

UE4.11で追加されたStereo Layerコンポーネント
f:id:pafuhana1213:20161224184710p:plain

UE4.14でOculusだけでなく、HTC ViveとPSVRにも対応しました!
f:id:pafuhana1213:20161224185155p:plain

これはめでた…え?そんなコンポーネント知らない?
便利…ですよ!?ほら!
f:id:pafuhana1213:20161224185502p:plain

…ということで、Stereo Layerコンポーネントについて簡単解説!



利点

StereoLayerコンポーネントを使うことで、
指定テクスチャが適応された矩形・円柱・キューブマップを、
ポストプロセスなどの影響を受けることなく、
最前面かつ3D空間内に配置することができます!


↑の画像は左からStereo Layer、StaticMesh、UMGの順で並べています。
また、シーン全体に青色を付加するポストプロセスを配置しています。
見ての通り、最前面かつポストプロセスを無視しているのが確認できます!

ポストプロセス無視

UIの場合、ユーザにその内容を正確に伝える必要があるため
表示に影響を与えるポストプロセスは排除したいところです。

StereoLayerを使わない場合は、UMGやCanvasによる
2DUIを使用するしかありませんでした。しかし、2DUIはVRでは使い物になりません…
そこでStereoLayerの出番というところです。

最前面描画

最前面に描画したい場合は、2D空間に書くかデプステストを切る必要があります。

デプステストを切る為には、
マテリアルの場合は「Translucency/Disable Depth Test」にチェックを、
UMGの場合は以下のスレッドに書かれた方法を取る必要があります。
How to disable depth test for 3D UMG widget ?

しかし前者は半透明に設定することによる描画コスト、
後者は全てのUMGがデプスを無視してしまうというデメリットがあります…

そこでStereoLayerの出番です!
どうでしょうか?かなり便利な子ではないでしょうか!?

欠点

StereoLayerコンポーネントはVR専用の機能です。
その為、非VR環境では表示されません
また、歪んでいないミラー画面の場合も表示されません。
具体的には、"hmd mirror mode 0"以外のミラー画面では表示されません。

これはStereoLayerがOculus,Viveのランタイムによって
歪んだ画像に直接合成する仕組みを取っていることが理由です。

また、最前面に描画するということは奥行き違反が発生することになります。
人によってはVR酔いの原因になるため、十分に注意してください。

使い方

基本的な使い方は簡単で、StereoLayerコンポーネントを追加して、
f:id:pafuhana1213:20161224193407p:plain

表示させたいテクスチャを指定するだけです。
f:id:pafuhana1213:20161224193833p:plain

各パラメータ

Live Texture

Scene CaptureやVideoなどの毎フレーム更新されるテクスチャの場合は
このフラグにチェックを入れる必要があります。

Supports Depth

StereoLayerがdepth intersectionsを必要とする際は有効にする必要があります。
(Oculusの場合はチェック有無で挙動は変わらない…?)

Not Alpha Channel

テクスチャのαチャンネルを使わない場合はチェックを入れます

Stereo Layer Type
  • World Locked
    • ワールド座標系を使うようですが…挙動をあまりよく掴めてません…
  • Tracker Locked
    • HMDのトラッカー座標系を使います。
    • 画面貼り付き(カメラに追従)ではなく、空間に配置したい場合はこちらがオススメ
  • Face Locked
    • ビュー座標系を使います
    • 画面に貼り付けたい場合はこちらを使用
Stereo Layer Shape
  • Quad Layer : 矩形
  • Cylinder Layer : 円柱
  • Cubemap Layer : キューブマップ
    • ロードシーンでの使用がおすすめです。

最後に

とても便利な機能なのですが、情報があまり見当たらないので
軽く纏めてみました。こんな表現ができるよーなどありましたら、
是非是非共有して頂けると幸いです!