視差無し立体視のススメ

本記事は こりんさんに続く、Oculus Rift Advent Calendar 2014の第18日目の記事となります。
対象読者は、「DK2 を購入したけど、日常的に楽しめるゲームも立体視動画もまだ少ないので、 主に2Dの動画(ライブ動画、MMD動画、R18動画等)を楽しんでいる人達」向けになります。




■はじめに

立体映画ブームの到来(2008)
http://eiga.com/extra/oguchi/1/
「3D世紀 立体映画の100年」(2012)
http://www.4gamer.net/games/017/G001762/20121031071/

この辺りを読みますと、3D映像技術の発達が商業的な立体映画ブームを何度も巻き起こしてきたことが分かります。
一方の個人制作では、例えば、ニコニコ動画の総動画数 約1100万件の中に立体視タグが付いているものは786件しか無く、ごく一部の人が制作し、ごく一部の人が楽しんでいる状況がずっと続いています。
個人に普及しない一番の理由は、やはり視聴環境が限られているのがネックなのではないか?と私は思っています。
(平行法/交差法は慣れないと難しいですし、裸眼立体ディスプレイは普及しないし..。見る人が少なければ、作り甲斐も薄いし...)



ただ、最近では立体視可能な2眼のスマフォHMD ( タオバイザー , Google Cardboard 等)が廉価なので、スマフォを買うとおまけに付いてくるぐらいの勢いで普及すれば、サイド・バイ・サイド形式等のステレオ立体視動画を作る個人も増えてくるのでは?と期待しています。(実際に、「サイドバイサイド動画生成方法まとめ」という記事を書かれている人も現れています…)



そうは言っても、個人が2眼のステレオカメラを日常的に使ったり、CGソフトから立体視動画を出力するのが当たり前になるのはまだまだ先になりそうです。

…だったら、今ある 2D の動画をどうすればもっと楽しめるのか?を追求するしかないじゃない!


との思いで、自作の動画再生ソフトでいろいろ実験した結果、2Dの動画でも強い立体感を感じる特殊能力 ( 異能?! ) を獲得できたので、その体験について書きます。






■立体感を知覚するメカニズム
立体視を探求するには、まず、立体感をどのように知覚しているのか?について知る必要があります。
視覚心理入門(オーム社)によれば、
・ピント(水晶体の厚み調節)
輻輳角(左右の視線が作る角度)
・絵画的手がかり(陰影、遮蔽、線遠近法、空気透視…)
・動きによる手がかり
・左右の眼で異なるステレオ映像(両眼視差)
といった情報を脳内で統合して、立体感を感じているのだそうです。


以下のサイトには、立体感を感じさせる要素について平易な言葉で解説されています。

3D立体視の解体新書 -
立体視という知覚(1)〜単眼立体視(1)
http://news.mynavi.jp/column/graphics/096/
立体視という知覚(2)〜単眼立体視(2)
http://news.mynavi.jp/column/graphics/097/
立体視という知覚(3)〜両眼立体視
http://news.mynavi.jp/column/graphics/098/
立体視という知覚(4)〜単眼立体視と両眼立体視の有効範囲の考察
http://news.mynavi.jp/column/graphics/099/

様々な情報を元に立体感を判断しているのであれば、両眼視差という要素が抜けても
立体感を感じられる状況があり得るわけです。実際に、その特性を利用したコンテンツとして「単眼立体視」もしくは「片目3D」というタグを付けられた動画がニコニコ動画に投稿されています。

単眼立体視(32件)
http://www.nicovideo.jp/tag/%E5%8D%98%E7%9C%BC%E7%AB%8B%E4%BD%93%E8%A6%96
片目3D(261件)
http://www.nicovideo.jp/tag/%E7%89%87%E7%9B%AE3D

単眼立体視を意識した動画の作例


「Tell Your World」のMusic Videoを片目で見ると立体視できるらしい件
http://vocaloid.blog120.fc2.com/blog-entry-11545.html

Wink3D (単眼立体視に絡む特許の例)
http://galgali.net/wink3d/summary.html


OculusRift で単眼立体視を体験しようと思ったら、片目の映像を隠すだけなので
Unityであれば、カメラの前にレイヤー名を付けた巨大な黒い壁を置いて片方のカメラの Culling Mask でそのレイヤーを外すだけ
(Culling Mask の設定次第で片方の目には見えない壁ができる)
で作れるのですが、それはあまりに虚しいのでもう少し考えます...。








■なぜ 2D は 2Dに見えるの?
さて、単眼では立体感を感じられる単眼立体視映像が 両眼では平面状に見えてしまう理由は何でしょう?
これを直接研究した論文は見つけられなかったのですが、私自身は輻輳角による距離認識が効いているのではと考えています。

図1
上図のように遠くにスクリーンがあれば、その1点を見つめた時の輻輳角は狭くなり、近くなれば輻輳角は広くなります。




図2
輻輳角による距離判断ができると、スクリーン上の点は経験的に同一平面上と判断してしまい、
「平面上にあるものに奥行きがあるわけがない」
と脳が判定してしまうために、他の手がかり情報からの奥行き推定を行わなくなるのでは?と思っています。

図3
…ということは、、輻輳角をゼロにしてしまえば 輻輳角による距離判断を無効化できるかもしれません。

ちなみに、このアイデア自体は古くから知られていて、1907年にカール・ツァイスシノプター(Synopter)として特許を取っているそうです。 ( 参考:On so-called paradoxical monocular stereoscopy )




Oculus-Unityアプリで 輻輳角をゼロにする方法としては、
無限遠に無限大のスクリーンを置く…のは無理なので、
・十分に遠い位置に巨大なスクリーンを置く… 35m離れると 輻輳角は0.1度以下になります。
・左右の眼に見えるスクリーンを分離して位置をずらす
・OVRManager の Monoscpic モードを使用する
・IPDをゼロにする
等が考えられます。


KaleidoPlayerでは、起動初期の状態でスクリーンとの距離が40メートルあるので 輻輳角はほぼゼロです。

私自身の経験では、輻輳角ほぼゼロでも十分に立体感を感じる時と 平面に感じる時があって、その場合は
マイナス側に少し広げることで平面感を消すことができました。

↑図4

↑図5
KaleidoPlayerのSynopter 画面の数値をマイナスにすると、スクリーンの位置がメートル単位で広がってゆきます。
−0.07m 前後で輻輳角ゼロ、さらにマイナスを増やすと徐々に見づらくなり、最終的には左右の映像を1つの映像として見ることが出来なくなります。
本来、眼球は輻輳角がマイナスになるような動きは出来ないはずなので、眼が疲れず且つ平面に感じない程度の小さな範囲で調節することが望ましいです。




↑図6
輻輳角をゼロ以下にする以外にも 平面を見ているという感覚を消す方法があって、
1つは プルフリッヒ効果で使われるような、左右の映像の明るさを変える手法です。


図7
プルフリッヒ効果を確認したいだけであれば、プルフリッヒ方式の設定画面で 色をGrayにすると明るさを調節できます。
但し、この機能での長時間の視聴は避けたほうが良い気がします..。私が試した範囲では、視聴後に明らかに眼に違和感がありました。
根拠は無いのですが、左右の目で映像の明るさが異なると 瞳孔の開き方で適応してしまうのではと疑ってます。


図8
本来のプルフリッヒ効果は現れにくくなりますが、色味を黄色と青色に変えただけのほうが 目に優しく平面感を消せると思います。
脳内の画像統合能力は優秀で、少々色味が異なっていても ほぼ元の色として見えます。



明るさ・色みを変える以外には画像の大きさを変える方法があります。

図9
KaleidoPlayerのSynopter 設定中に下にでるこの設定で、左目のスクリーンの横幅の倍率を変更することができます。
右目と左目で横幅の異なる画像を見せられたら 脳はどう判断するのだろう?との素朴な疑問が作ってみた機能ですが、平面を見ているという感覚を消すのに役に立ちました。



■立体感覚は鍛えられる
1年近くKaleidoPlayerで75fps化動画を見続けた結果、概ね以下の様な順に 2D映像に対して立体感を感じる能力が徐々に強化されたように思います。

平面状のスクリーンを見ている感覚が消えて、映像の中に居るような臨場感を感じる

動きのあるシーン限定で
前景(キャラクタ)と後景(背景)になんとなく距離差を感じる
カメラの動きを自分の動きのように体感する

前景(キャラクタ)の形状=立体感をより正確に感じる

陰影が少ない、動きの少ない動画・静止画でも同様な立体感を感じる

普通の液晶ディスプレイでも離れてみると、ディスプレイの奥側に空間が広がっているように感じる

もちろん、私自身の体験が万人向けに一般化できるとは思いませんが、参考にして頂ければ幸いです。



■終わり
OculusRift で 2Dな動画を見せるコンテンツを作る機会があれば、スクリーンとの距離を長く取って欲しい…。
動画視聴マニアからのささやかな要望です。よろしくお願いします。



明日は、@hecomiさんによる「VR 内で自由自在に魔法を描いて遊べる MagicVR を作って公開してみた」です。お楽しみに!

多数の動画をまとめて 75fps 化するための Perl スクリプト

MeGUI を使用した動画の 75fps化手順を
http://d.hatena.ne.jp/fai_fx+OculusRift/20140814/1407967104
に書きましたが、動画の数が数十を超えると結構たいへんです。


そこで、フォルダ階層内のすべての動画を一括変換するための MeGUI 用のジョブファイルを生成する Perl スクリプトを作成してみました。ダウンロードはこちらからどうぞ。
動作には、ActivePerlが必要です。




動作イメージは以下になります。


(1) 動画のあるフォルダに スクリプトをコピーして、ダブルクリックします。


(2) 変換に必要な *.avs , jobXX.xml , joblists.xml が一括生成されます。


(3) MeGUIフォルダに jobsフォルダと joblists.xml をコピーします。
スクリプトで自動コピーされます)


(4) MeGUI を起動すると登録されていますので、Start を押すだけです。



手持ちの動画が .mp4 と .flv のみだったので2種類含めています。
ベタな Perl で書いてあるので、容易にカスタマイズできるかと思います。。

OculusRift DK2 のための 動画の 75fps 変換方法

お久しぶりです。fai です。
Oculus Rift DK2 が届いたので、早速 KaleidoPlayer も対応させました。
SDK 0.4.1 対応の最新版(ベータ3)はこちらです。
前回のベータリリースから、UIの細かなバグも修正していますので、再度ダウンロードして頂ければと思います。



さて、本題の 75fps化です。

このツイートを読んで、やはり 75hz駆動の DK2で動画鑑賞するには、動画自体の 75fps 化が不可欠であると確信しました。そして、いろいろ試行錯誤した結果、現時点でのお勧め変換方法が見つかったので紹介します。
24〜30fpsの動画を75fps化して視聴すると、全ての動画を 75fps化したくなるほどに感動的なので是非一度お試しください。






導入

Oculus Rift で擬似的な大画面で動画鑑賞すると、動画のコマ数不足による飛び飛びな動きと、ディスプレイと映像の更新タイミングのズレから生じるチラつきが非常に気になります。
この問題は、以前から他の再生機器でも同様に起きており、一つの解決策として、Smooth Video Project(SVP)が知られています。
SVPを常駐起動させておくと、動画再生時に自動的に補間フレームを作成して滑らかな動きと、更新タイミングの一致したフレームレートへの変換を実現してくれるのですが、残念ながら、KaleidoPlayerでは満足な結果は得られません。
(高解像度動画ではSVPの処理が間に合わずコマ落ちするのと、SVPで75fps再生させても僅かにタイミングがズレるようです。RiftのDirect HMD Access Driverが改善されれば治るかもしれませんが....)



そこで、SVPでの動的変換はあきらめて、動画ファイルを75fpsに保存してから再生させることにしました。
基本的には、「Convert videos to 60fps」の通りですが、いくつか補足・変更を加えています。

Step 1:

http://www.spirton.com/uploads/60FPS/Files-20131216.zip
をダウンロードして、AviSynth.exe(MT:マルチスレッド対応の2.6版)をインストールします。

toolsフォルダの中身は、最新版を別途入手するので不要です。



AviSynth(MT)の最新版は、こちらにあります。
このサイトでは dll のみの提供なので、AviSynth.exe をインストール後に、
system32 (32bit OS) または syswow64 (64bit OS) フォルダ内の avisynth.dll と入れ替えてください。




MeGUIは、最新の MeGUI_2507_x86.zip をダウンロードしましょう。
http://sourceforge.net/projects/megui/files/?source=navbar

C:\MeGUI 辺りに解凍しておけばOKです。
インストーラから、C:\Program Files (x86) 等に入れてしまうと起動時に毎回管理者権限の確認がでるので不便です。



Step 2:

元サイトでは、MKVToolnix を入れていますが、本記事では MKVコンテナを使わないので不要です。
K-Lite Mega Codec Packは、注意深くインストールしましょう。



Haali Media Splitterは、DSS2方式で動画を読み込ませる場合に必要ですが、変換が上手くいかない場合にインストールすれば良いです。


toolsフォルダの最新版である、InterFrame 2.5.2は解凍後、6つのファイルを
C:\MeGUI\tools\avisynth_plugin\
にコピーしてください。

Step 3:

MeGUIを起動すると以下の画面になります。

Step 4:

Ctrl+R または、メニューから Tools -> AVS Script Creator で以下のウィンドウが開きます。

Step 5:

Config ボタンを押すと以下の画面になります。

Step 6:

New ボタンを押して、75FPSと入力すると以下の画面になります。

Step 7:

75FPS変換用のスクリプトとして、以下のコードをコピー&ペーストしてください。

Setmemorymax(512)
SetMTMode(3,4)
PluginPath = "C:\MeGUI\tools\avisynth_plugin\"
LoadPlugin(PluginPath+"svpflow1.dll")
LoadPlugin(PluginPath+"svpflow2.dll")
Import(PluginPath+"InterFrame2.avsi")
<input>.ConvertToYV12()
SetMTMode(2)
<deinterlace>
<crop>
<denoise>
<resize>
InterFrame(Cores=4,GPU=true,NewNum=75,NewDen=1)

注意 #1:
3行目のフォルダのパス(C:\MeGUI\tools\avisynth_plugin\) が、実際の環境に合っているかどうか確認してください。

注意 #2:
SetMTMode(3,4)
InterFrame(Cores=4,...)
の 4 は、CPUのコア数です。PC環境に合わせて変更してください。

注意 #3:
InterFrame(Cores=4, GPU=true,...)
高級なGPU搭載マシンでは、 GPU=true でGPUによる計算処理が使えます。
オンボードの場合は false にしないとエラーが出ます。


注意 #4:
Setmemorymax(512)
十分なメモリ搭載マシンでは、2048 程度まで上げてください。処理が高速化します。
(32bitアプリなので、4GB以上は設定出来ません..)

Step 8:

Extra Setup タブをクリックしてください。
Haali Media Splitterをインストールしていると
"Prefer DSS2 over DirectShowSource"
が選択できます。

↑※未インストールなので選べませんが、ほとんどの場合問題ありません。

Optional tip #1: You might also want to choose your preferred resizer. For aspect-ratio changes (like from 720x576 to 720x480) a neutral filter like Spline36 will be nice. For actual resizing (like from 1920x1080 to 1280x720) a sharp filter like Spline64 will be best. I usually just leave it on Spline36. Make sure to untick the checkbox on the option after you change the default resizer, otherwise it will always be used by default which is often unnecessary.

Optional tip #2: I recommend changing the "MOD value used for resizing" to mod4. This gives the best balance between compatibility (a lot of devices like PS3 don't have good mod2 support) and aspect ratio accuracy (the higher the MOD value, the more likely the aspect ratio is to be skewed more heavily).

リサイズする場合は参考に…。

Step 9:

動画を選びます。


↓このダイアログが表示されるので、 DirectShowSource を押してください。

Step 10:

Save ボタンを押します。

↑押す度に動画のプレビューウィンドウが開きますが、適宜閉じてください。
動画が正しく読めない場合、プレビューウィンドウでおかしな画像が出ることがあります。
その場合は、Step 9 で、File Indexer を試してください。
動画読込みプラグインが異なるので正常に読み込める可能性があります。

Step 11:

エンコードの設定をします。
Encode settings は、 x264
File format は、RAWAVC
を選び、Config ボタンを押します。


X264の画質設定画面では、Quality値を20に変更し、Newを押して、Quality20等適当に名前を付けてOKします。

Quality値はゼロで無劣化、サイズを気にせずに高画質にするなら 16〜、ネットに上げるなら23〜で、ノイズが気にならないのは20前後…と言われています。

Step 12:

エンコード設定を終えたら、Queue ボタンを押します。

Queue タブをクリックし、Start ボタンを押すとエンコードが開始されます。
(デフォルトでは自動的に開始されると思います)


メニューの Options -> Settings で、キュー追加時の自動開始設定を変更できます。

Step 13:

Step12 で生成された .264ファイルは映像のみが 75fps化された動画なので、これに音声を結合させる必要があります。
Ctrl+5 または、メニューから Tools -> Muxer -> MP4 Muxer で Muxer 設定画面を開きます。

Video には、75fps変換済の .264ファイルを選びます。
Audio には、元の動画が .mp4 の場合は、その動画を選びます。
それ以外の形式の場合は、動画ファイルから音声ファイルを抽出する必要があります。
(MeGUIのメインウィンドウ下側の Audio の機能でmp3を生成することもできます)

Queue ボタンを押して、Start すれば結合された動画が作成されます。

K-Lite Codec Pack に付属してくる MediaInfo ツールで確認すると 75fpsになっていることが確認できます。

変換に使用した、.264 と .avs ファイルは削除してください。

再生時の注意:

  • グラフィックスドライバの垂直同期はオン
  • DK2 は 75hzで駆動させる
    • Extendモードの場合、DK2側をプライマリモニタにしないと 75Hz にならない問題があります。
  • KaleidoPlayer(Unityアプリ)は、VSync有りの Graphics quality で起動する
    • Shiftキーを押したまま 起動させると、Unityアプリの設定画面が表示されるので選べます。
    • ※まだ開発中なので、VSync無しの 「Don't Sync」 が選べます..。

  • KaleidoPlayerが利用している動画再生アセット(AVPro WindowsMedia)には DisplaySync 機能がありますが、これはオフ推奨です。
    • DisplaySyncは操作パネルの8枚目で変更でき、次の動画再生から有効になります。
    • 私見では、20〜30fpsの低fpsの動画で有効であり、75fpsの動画では逆に遅れを生じさせるようです..orz

↑正直なところ、
ドライバの設定が オフ/オン/適応/適応(ハーフ) の4種類
Unity の Graphics quality 設定が、Don't Sync/Every VBlank/Every Second VBlank の3種類
DK2との接続が Direct Mode/Extend Mode の2種類
AVPro の DisplaySync が On/Off の2種類
で、どの組合せが一番良いのか?まで詰め切れていません。
PC依存で変わるかも知れませんので適当に試してみてください。







最後に:

(1)元記事では MKV に変換していますが、本記事では MP4 にしています。これは、MKVコンテナの動画では、同じ75fps であるにもかかわらず、完全に同期して再生できなかった為です。コーデックの設定等で解決するのかも知れませんが、現時点では MP4 でのみ動作確認できています。


(2) 75fps変換には、スクリプト式動画編集ソフト AviSynth を使用しており、動画入力方法(関数)はこちらに説明があります。
本記事では、DirectShowSource を採用していますが、動画によっては画面サイズ次第でも不具合が出ます。
その場合は、動画選択時に File Indexer を選べば、FFmpegSource を使用できます。
Haali Media Splitterをインストールすれば、DSS2 も利用可能になります。
プレビュー時点で画像がおかしい、あるいは、99%変換時に固まる等、変換に問題がある時は適宜変更してみてください。



(3) fps変換設定の調整については、こちらに InterFrame 関数の説明があります。デフォルト設定では多少のカクつきが残るものの、実写からアニメまで各種素材で良好な結果が得られる気がします。(スムーズにするほど、不自然な形状≒artifactsが生じるので妥協しましょう..)



(4) MeGUIのバッチ処理について。
処理内容は、.avsのテキストファイルと joblists.xml と jobs/jobNN.xml で管理されているので、これらのXMLテキストを自動生成できると一括変換も可能です。
(XMLは、ActivePerlのスクリプトで encoding="Shift-JIS" で出力しても動作しました..。perl を編集できて、ベタなスクリプトでも欲しい人はコメントください)

Oculus Rift で360度パノラマ動画を楽しむ

最近話題になることの多い、360度パノラマ動画をOculusRiftで観るためのメモです。

動画ファイルのダウンロード方法

(1)公開されているサイトを探します。
http://www.idoga.jp/ 花火がお勧め
http://t-photoworks.com/ 気球に乗れる!
http://www.vrwebdesign.co.uk/360-degree-video/ ロンドン
http://tommills.co.uk/category/360-video/ 南スーダン
http://www.airpano.com/360-videos.php ロシアでヘリ空撮
http://www.360-grad-video.com/pages/360deg-video.php
http://www.360panorama.fi
http://video.virtualvisit.tv/examples/streetview-dubai.html ドバイ,アンコールワット
http://www.gopano.com/ 世界中に行ける?
http://sziget360.com/panoramavideo ライブ感のある世界
http://360vr.jp/videofile/gpt/2.html 囲まれてライブ
http://im360.immersivemedia.com/watch/im360/ スカイダイビング他多数有り
http://www.spherevision.com/360-video-in-action/360-presentations/ ポルシェ、カヌー、スキー、ローラーコースター
http://eyes.kolor.com/en/



(2) Google Chrome または Firefox で動画ファイルをダウンロードします。
Firefox + FlashGot等のダウンロード支援プラグインを利用すると楽ですが、Chrome/Firefox 単体でも以下の手順で可能です。


↑ Ctrl + Shift + i で、開発者向けのコンソールを表示させて、Network/ネットワークを選びます。



↑動画サイトを閲覧します。
mp4, flv, f4v, vwm 等の拡張子の動画ファイルのURLが見つかります。


Chrome の場合は、右クリックしてURLを開きます。


↑動画ファイルが直接再生された場合は、右クリックで保存します。

Chrome の場合は、Filter 機能でファイルを絞り込むことも可能です。





Firefox の場合は、URLをコピーします。
新しいタブで開くと、バイナリファイルを直接表示してしまい、保存が面倒になることがあるのです。


Firefox の場合は、Ctrl + J でダウンロード画面を開き、URLをペーストします。





動画ファイルの再生方法

再生ソフトとしては、MIRO/@MobileHackerz氏お勧めのKolor Eyes Desktopや、VRPlayerTotal Cinema 360 が天球スクリーンをサポートしているのですが、使い方が分からなかったり動作が不安定で困る人には、拙作 KaleidoPlayerをお勧めします。
ver1.1 から、天球(Sphere)と、GoPano用円筒形スクリーンを追加しています。




保存したパノラマ動画ファイル または、複数ファイルのあるフォルダを KaleidoPlayer.exe にドロップして起動してください。

G キーでスクリーンを変えられるので、Sphere または GoPano で楽しめると思います。



※動作しない場合は、以下をインストールしてみてください。
Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86)
K-Lite Codec Pack

キッチンペーパーで作る Oculus Rift 専用 汚れ防止シート

OculusRift を長時間装着していると、どうしても気になるのがスポンジ部分への汗汚れです。
定期的に洗えば良いのですが、その手間を減らすために試行錯誤して辿り着いたのが以下の方法です。
(目出し帽を被ってみたり、Tシャツの袖を切ってカバー代わりにしてみたり、紙でカバーを作ってみたり・・・いろいろやりました...。)


■材料/道具の準備
・キッチンペーパー1枚
・ハサミ、定規またはメジャー

(1)タテヨコ 22 cm 四方以上の大きさのキッチンペーパー1枚

厳密に必要なサイズは、
横幅は 20cm 以上必要 23cm程度が理想
縦幅は 11cm 以上必要 12cm程度が理想
です。

素材については
○天然パルプ製のクッキングペーパー/ペーパータオルなら可
×シリコン加工のクッキングシートは不適
○梱包用の発泡シートでも可
×プチプチ君は不適
です。


(2) ハサミ
紙が切れるものであればOK。


(3)定規/メジャー 10cm程度が測れるモノ
切る部分の長さを測ります。慣れたら目分量で切っても良いですが、
最初は測ってみた方が良いかと思います。

前もって厚紙や塩ビ板で2.5cm x 6cm サイズのガイドを作っておくと便利です。



■加工の仕方
(1) 22cm四方のキッチンペーパーを半分に切ります。

(2) 四つ折りにします。

(3) 中央部から 2.5cm x 6cm のサイズを切り抜きます。

広げれば 5x12cm の穴の空いたシートの完成です。

慣れれば30秒も掛からずに作れます。^^v


■装着の仕方

(1) 机の上にRift を置き、その上にシートを重ねます。

(2) その上から顔を押し付けて、サンド状態にしてから顔をあげます。



汚れ防止の観点からは、水分を通さない発泡シートが確実ですが、スーパー等で簡単に手に入るキッチンペーパーで作るのがお手軽ですので、是非一度お試しください。

Unity製 Oculus Rift アプリが動作しない時の対処法など

拙作 Oculus Kaleido Player が動作しないとの連絡があったので、動作環境について調べました。
Unity製 Oculus Riftアプリが動かない時の参考にしてください。

(1) 起動時にクラッシュしてしまう。


これは、グラフィックスドライバがインストールされていない、または、VirtualPC(仮想環境)で実行時に発生します。
DirectXOpenGL が正常に実行できないことが原因のようです。

↑画面プロパティを見ると 標準VGA 等になっています。


nVidia / AMD / Intel などから最新のグラフィックドライバをインストールしてください。

(2) コンフィグ画面は出るが、Play! を押すと黒画面になる。


↑コンフィグ画面

↑黒画面内に FPS:0 などが表示される。
これは、Oculus.dll が読み込めない場合に発生します。
以下のランタイムをインストールしてください。
Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86)
http://www.microsoft.com/ja-jp/download/details.aspx?id=8328

※稀にアプリが64bit版として作られている場合は、こちらになります。
Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x64)
http://www.microsoft.com/ja-jp/download/details.aspx?id=13523

(3) 画面が樽型に歪まない

これは、HDMIもUSBも未接続の時に起こります。

全ての接続を確認してから、アプリをもう一度起動し直してください。

(4) その他

何かおかしな現象が起きる場合は、XXXX_Data フォルダ内の output_log.txt を調べてみてください。
解決のヒントになるログが記録されているかもしれません。


Unityとは直接関係ありませんが、Riftアプリによっては、追加でインストールが必要になるランタイムがいくつかあります。例えば、カスタムメイド3D(R-18)では、DirectX 9.0c が必要になります。

DirectX End-User Runtimes (June 2010)
http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=8109
特に Windows8 では、DirectX 9.0c がWebインストーラからは入れらないので、上記フルセット版をダウンロードする必要があります。


Visual C++の特定のバージョンで作られたDLLを含むようなアプリでは、下記サイトに書かれている再頒布可能パッケージをインストールする必要があります。
http://softinfo.seesaa.net/article/126815675.html


それでも動作しない場合は、OSの種類(Windows Vista/7/8 ,32/64bit版)、GPUの種類、パソコンの型番等を作者に連絡して相談してみましょう・・・^^;

Oculus Rift 専用 2D 動画再生ソフト Kaleido Player

※DK2 に対応した最新版は、
http://ux.getuploader.com/fai_fx/download/366/KaleidoPlayerDK2_beta7.zip
からダウンロード出来ます。



この記事はOculus Rift Advent Calendarの24日目です。
こんにちは。12/24 担当の fai です。

■はじめに
いよいよクリスマスですね。
先人の知恵を活かして、Oculus Rift + Unity でクリスマスの世界に嫁を召喚する…のも素晴らしいのですが、
そんな時間も無い人(=私)のために、2D の動画(過去の資産)を OculusRift ならではの楽しみ方ができる動画再生ソフトを作ってみました。

既に Rift用の動画再生ソフト がいくつかありますが、複数の動画ファイルを順番に再生する機能がありません。
(Stereoscopic Playerのビデオライブラリ機能で連続再生可能ですが、初回再生時に条件設定をする必要があって使いにくい..)
この点だけでもどうにかしたいと思ったのが自作のきっかけです。


■自作の手順
動画再生ソフト自体は、Unity + 有料アセットで簡単にできるので省略します。自作したい人はリンク先を参考にしてください。


■工夫して便利だったこと(開発者向け)
(1) 操作説明パネル
凝ったGUIを作る余裕が無かったので、必要な機能を全て XBOX コントローラのボタンに割当てました。
その結果、一度に覚える(思い出す)のが困難な操作系になってしまったので、忘れても大丈夫なようにRift内に画像で表示させるようにしました。

VRGUIで画像を出すだけなので実装が簡単な割に、地味に便利です。



(2) 現在時刻表示
動画鑑賞に没頭していると、たまに気になるのが現在の時刻です。
その度にRiftを外すのは面倒なので、画面内に時計を表示できるようにしてみました。

↑緑文字が時刻
環境再現系アプリや○○添い寝のような長時間装着が前提となるアプリには、時計機能の実装がユーザに喜ばれると思います。




■没入感の工夫
ここからが本題です。

2D の動画を鑑賞する際の没入感を向上させるために以下のような考察をしました。

図1
HMDで動画を観ると、暗闇の中に四角のスクリーンがある状態になります。
この場合、スクリーンの四角いフレームを境界として、暗闇側(=現実)の世界と、スクリーン内側の世界が別々の世界であると脳内で認識されます。これをフレーム効果と呼ぶことにします。
(ちなみに、写真の構図のテクニックのひとつに『額縁効果』という用語があります。これは仕切ることで対象を際立たせることを目的としていますが、こちらとあちらを区切るという意味では同じ効果と言えます。)




図2
Oculus Rift では、視界内がスクリーンで完全に覆われるところまで近づくことができます。
すると、脳内ではあたかもその映像内の空間に居るような錯覚が生じます。

人間の空間認識は、もちろん、両眼視差による奥行き知覚も重要ですが、運動視差や、遠近法、陰影など複数の情報源から総合的に判断されています。
参考:https://www.kitakyu-u.ac.jp/env/research/case/files/P17-18.pdf


日常生活でしばらく片目をつむって生活してみても、立体感が完全に消失することは無いですよね。


むしろ、「視界全体に何が見えているか?」が「自分が何処にいるのか?」の空間認識には重要です。
RICOH THETA のパノラマ画像を Oculus で見ると臨場感を感じるのは、視界がその空間の画像で覆われているからと考えられます。



図3
視界全体を覆うほどスクリーンに近づくと、見える範囲も限られますから、シーン全体の動きがつかめなくなり、あまり楽しめません。
仕方なく、現実的に動画を楽しめる距離まで離れますと、上下に邪魔な部分が見えてしまい、フレーム効果で現実に引き戻されます。



図4
…だったら、邪魔な部分も動画で埋めてしまえば、( ・∀・)イイ!! と考えて、
スクリーンをタイル状に多数並べたり、直方体の内面全てに貼るなど試行錯誤して出来上がったのが、
Kaleido Player です。ダウンロードはこちらからどうぞ。
※DK2 に対応した最新版は、
http://ux.getuploader.com/fai_fx/download/366/KaleidoPlayerDK2_beta7.zip
からダウンロード出来ます。


全方位を動画に囲まれて感じる謎の臨場感は、一度は体験してみて頂きたいです。


鑑賞に適した動画素材は、
MMD動画のような 3D をレンダリングしたもの
・実写(風景、ミュージックビデオ、ドラマ)
・背景が立体的に描かれたアニメ
辺りで、ぶっちゃけ何でも良いのですが、カメラワークが固定かゆっくり動く作品が没入しやすいと思います。

フラッシュカットのように短時間に頻繁に場面が変わる動画はいまいちです。
MMD動画で背景が平面状のイラストだったり、画面全体にポスト・エフェクトが掛かり過ぎたものも適さないようです。
自然風景で森の映像のように木の葉のディテールが要求されるシーンは、解像度の低さがネックになって厳しいです。

パソコンのモニタで見ると平凡だった映像作品が、Kaleido Playerの大画面で見ると印象ががらっと変わることもありますので、是非、いろんな動画を試してみてください。

Oculus Rift Advent Calendar、明日は@heron64さんです。よろしくお願いします。





「Kaleido Player には、座席が無いようだが」
「あんなの飾りです。偉い人にはそれがわからんのですよ。」