VRエンジン作成日記

ひたすらVRエンジンを作っていきます

立体視用の機能を追加

ようやくVRっぽい機能を1つ追加できた。

立体映像の表示方法にはいくつか種類がある。基本的にはどれも、左右の目で別々の画像を表示する構成になっている。例えば次のような種類がある。

 

・サイドバイサイド (side by side)

f:id:hikipuro:20180830004513p:plain

 

・トップアンドボトム (top and bottom)

f:id:hikipuro:20180830004759p:plain

 

・ラインバイライン (line by line)

f:id:hikipuro:20180830004826p:plain

 

今のところとりあえず、この3種類の表示ができるようにしておいた。Youtubeの3D映像では、PCで閲覧時はアナグリフという方式が使われる。アナグリフというのは、右目に青のフィルム、左目に赤のフィルムを張り付けたようなメガネをかけて、左右別々の映像を1つのモニタ上に表示するという方式。アナグリフであれば、立体視対応モニタでなくとも表示することができる。今のところアナグリフ用のメガネを持っていないので動作確認ができず、実装もできていない。

ちなみに上の3種類については、LG製の立体視対応PCモニタで動作チェックをした。このモニタは偏光板付きのメガネをかけて立体映像を見るような方式になっている。立体視で見ると、テキストが画面から飛び出して見えた。

あと、スマホ対応を考えるならGoogleカードボード方式に対応した方が良いのかもしれない。現状の実装では、映像が左右にひしゃげたようなレンダリングになっているため、カードボードで見ると映像が縦長になっているように見えるだろうと思う。カードボードに対応できれば、そのままオキュラスリフト対応にもなるのではないだろうか。

どのようにしてこの映像をレンダリングしているかというと、単純にステージ内にカメラを2つ追加したような構成になっていて、左右に10cmから20cmずらして (レンダラ内の単位1を1mとした場合、0.1から0.2ずらして) 1フレーム中に1回ずつ、合計2回レンダリングするという簡単な方法を使っている。プロジェクション変換の行列の数値を変えることまでは考慮していない。処理負荷でいうと、描画するピクセル数は通常の描画でも立体視でも同じピクセル数になる。Unityでいうところのドローコールの量が2倍になる。

・関連するコミット

add stereo camera settings · hikipuro/tea.js@cb31c27 · GitHub