この記事に技術的な要素はありません。 この記事はOculus Rift Advent Calendar 2015 の2日目です。
1日目は @itachin さんのGearVR Coolerの話でした。
続きを読むこの記事に技術的な要素はありません。 この記事はOculus Rift Advent Calendar 2015 の2日目です。
1日目は @itachin さんのGearVR Coolerの話でした。
続きを読む前回のまとめ以降、ようやく触る時間と機材が出来たのでUnity上でTHETA SのHDMI Liveviewを追試しました。
イメージとしては凹みさんの
です。
みたいな内容です。
こんなイメージです。 今回はHDMI Dual FishEyeを使います。
HDMIからのキャプチャボードは色々な種類があります。最近だとスプラトゥーンの録画などでも皆さま買われてますが、あれも使えます。 OSから見た時に
という2種類の物が今回は使えます。 市場に出ているのは殆どすべてが2.です。
以下の2個をセットで買いましょう!
Febon198 http://www.amazon.co.jp/dp/B014QQXKVO/armneon-22/www.amazon.co.jp
HDMI Signal Converter
Febon198は OSからはUSB3.0の1080Pで60FPSなWebカメラとして見える、Febon198内の遅延は50-80ms程度(*1)、というトンデモないスペックの一品です。
デメリットは
などです。
Febon198はプログレッシブ信号しか受け付けないので、THETA含むデジカメからのインタレースな1080iなHDMI信号を読ませるには
HDMI Signal ConverterみたいにHDMI信号をなんでも1080Pに変換してくれるオモチャボードを通しましょう。
PCモニタ出力やXBOXの出力は1080Pなので、そういうのをキャプチャするだけならオモチャボードは不要なのですが、デジカメからの信号はインタレースが多いようです。ご注意ください。
セットで買わないと、こんな風に寝込む羽目になります。
届きました!結論から言うとTheta SのHDMIストリーミングは読めませんでした!
— 絵麻さんを養って幸せな家庭を築く (@izm) 2015年10月29日
おそらくTheta SのHDMIからは1080iの信号が出ていて、このボードは1080p専用なので、読めない感じですね。無念。代わりにPS3とかXBOX360からは読めます><
2万のキャプチャボードギャンブルに負けたので寝込みます😹😹😹
— 絵麻さんを養って幸せな家庭を築く (@izm) 2015年10月29日
ご存じ定番のBlackMagic!
なんでも読めるし、SDKも公式配布でフレームごとガバっと持ってこれて最高です。
http://www.amazon.co.jp/dp/B007ZDHDRS/armneon-22/www.amazon.co.jp
これを使えば大体のHDMI信号は読めます。ド定番!最高!!
遅延が大きいハズレもあったりする印象。2万円程度?
TL見てて動いたという話があるのはGC550など
http://www.amazon.co.jp/dp/B00ZOXYQ26/armneon-22/www.amazon.co.jp
Unity標準のWebCamTextureを開いて再生するだけです! こんな感じのスクリプトを、適当にUnityのPlaneにアタッチします。 Thetaの再生用 · GitHub
ここが結構大変な印象です。
BlackMagic系や、一般的なキャプチャボードなら AVPro Live Camera
https://www.assetstore.unity3d.com/jp/#!/content/3683 を使えば大丈夫だと思います。トライアル版で必ず事前に動作は確認してください。
尚、このアセットですが 200ドル と、比較的お高いです
(だからこそFebon 198を今回お勧めしてます。こっちは読むのタダですからね!) (他に安価な手段があるかもしれません。情報お待ちしてます!)
凹みさんの方法(前述)と
Stereoarts(Noraさん )の方法があります。 Stereoarts Homepage (Theta Shader Pack)
今回は後者のNoraさんのTheta Shader Packを試しました。
手順を念のため録画しました。一発撮りです。
Theta shader Packと、このスクリプトで作業しました。(部屋が散らかっていてお恥ずかしい) Thetaの再生用 · GitHub
Unity上でビルドしたexeを動作確認用に置いておきます。 Febon 198か、USB接続のLiveviewモードなら、再生できると思います。 https://copy.com/L6wAq9dYdIOrIHp1
生放送時のパノラマ配信インフラがどこかにないかなあと気になってます。ちゃんとした法人契約じゃなくても、個人でちょろっと試せる場があると嬉しいです。
*1:本家スペック表による。 Theta→Febon198→Unityの遅延はこんな感じで測ると260-300ms程度です。どうやらThetaの絵を読み込んでHDMIから出すまでは、100ms以上のタイムラグがあるようです。
ThetaS(HDMI) →Febon 198 → Unity の速度 は遅延として30ms-50msくらいですね。有体に言いまして、メチャクチャ速い!!
— 絵麻さんを養って幸せな家庭を築く (@izm) 2015年11月4日
Cc: @koukiwf さん pic.twitter.com/bIcItg1FO6
USBケーブルをPCとつながずに 写真動画切り替えボタンを押しながら電源を入れる→LiveviewモードになってからPCにUSBケーブルを刺す
という順番です。意外と忘れがちです。
Dual Fish Eyeの時の実効解像度から考えて
くらいまで欠落してます。1920x960のスティッチ済み動画と比べるとHDMI経由でも3-4割くらい落ちてる雰囲気です。
ついに念願の動画も取得できる安価で安心な全球カメラが出ました!
TL上ではハックが進んで有益情報も多いですが、twitter上の内容で散逸してしまうと勿体ないので、メモとして記載します。
Theta Shader Pack をリリースしました。Unity 向けの THETA / THETA S の全天周画像をリアルタイムに Equirectanguler に変換するシェーダーと、それらの補助スクリプト一式です。http://t.co/mmrKXr6MH0
— Nora (@Stereoarts) 2015, 9月 26
ThetaSのストリーミングをUnityVRサポート使ってOculusRiftDK2で見る方法
1.ThetaSのサイドのカメラ/動画ボタンを押しながら電源入れる
2.usbつなぐ
3. 「Ricoh Theta S」って名前でwebcam取得する
続く
— 光輝@エフピーエスガー (@koukiwf) October 24, 2015
@koukiwf
4.綺麗な円球を用意して、https://t.co/TZf15ta0s9を適用する
5. webcam流しこむ
6.unityのplayer設定からVRサポートにチェック
7.DK2で見る。
— 光輝@エフピーエスガー (@koukiwf) 2015, 10月 24
UnityのWebCamTextureからそのまま読めたと思います。
後は上記凹みtipsさんの記事を確認すれば大丈夫そうです。
まずハマりがちなのが、「Modeボタンを押しながら電源ONでLiveモード(HDMIパススルー)」を選んでやること。
BlackMagicのIntensityとかのキャプチャボードで良いやつを買って Blackmagic Design: Intensity
AVPro Live Camera(200ドル) https://www.assetstore.unity3d.com/jp/#!/content/3683
を買うと言うのが一番楽なようです。少しお高いですが、安心感があります。
この時の遅延は最小で200ms位?
また、directshow互換で絵を持ってくることが出来るキャプチャボードもあるので、
これもwindows上だと何とかしやすそうです(2万円程度) ただ、WebcamTextureでは読めないはずなので、上記AVPro Live Cameraが必要?
個人的に安くて気になるのがUVC互換のUSB3.0-HDMIキャプチャボード
FEBON: FEBON198 USB3.0 UVC HDMI Grabber Card User Manual
このキャプチャスティックが額面通りの性能なら、OSからはUVC対応のwebカメラとして認識されるので、UnityからそのままWebCamTextureとして取得できる気がします。
近所のホームセンター行って1/4高ナット二個と1/4長切ネジで合計160円でtheta s 三脚穴延長出来た✨✨✨
クリアランスオッケー!
(ネジは短くしたいなあ、切ろうかしら) pic.twitter.com/cswxY1doQK
— 絵麻さんを養って幸せな家庭を築く (@izm) October 24, 2015
日曜日にTHETA延長棒がどうしてもほしいということで、閉店間際の東急ハンズに駆け込んで、お店の方と解決法方を編み出しました‼ 合計257円なり。ハンズのお兄さん、どうもありがとう‼ pic.twitter.com/yyS0uGNEPT
— kata kimi (@hamu_suke) October 23, 2015
スマートな方法だとこれが良さそう?
ThetaSと台座買ってきて
開封しーの、土台外しーの
usbとhdmi合体行けたでー。 pic.twitter.com/W45D3a93sG
— 光輝@エフピーエスガー (@koukiwf) 2015, 10月 23
これを買って上のプラ部分を外す感じで www.amazon.co.jp
「いかにも使えそう」な、これは各端子と微妙に干渉するので不適
適当なスマホ+Cerevo LiveShell + THETA Sが今のところ良さそう。
【THETA S TIPS】THETA Sで360度ポータブルライブ配信するには?
PCレスでニコ生、Ustに配信可能
LiveShellとTHETA SをHDMI(Micro)で接続。モバイルバッテリーで給電。スマフォテザリング pic.twitter.com/oIHgWNlA05
— GOROman (@GOROman) 2015, 10月 23
純正ケースがギッチギチで凄く機動性を損ないます。
(一日差し込んで伸ばすと大丈夫という意見もあり)
最高にお勧めのケースは現在絶賛売り切れ中みたいです
@izm オススメケース ABITAX 5720 今日1日で各色完全に売り切れましたね
ABITAX 5720 Pocket LS GD 5720LS-03 ABITAX https://t.co/11sDU6swz7 @amazonJPから
— Y-WORKs (飯テロリスト) (@yworks2000) October 24, 2015
Blenderのスフィアマップ適用
THETA S、お気楽に映り込み素材撮影できるの良いね~。背景に写っちゃうなら被写界深度設定でボカさないと使いものにならない感じ。あと普通のjpegだから期待し過ぎない。 pic.twitter.com/b3mE02t20t
— 和牛先生 (@3dcganimation) October 24, 2015
パノラマ合成
RICOH THETA Sが買えた人はUnityにAvPro等のプラグインつかって動画取り込み+SphericalImageCamで書き出しすることで360パノラマの合成ができるよ
https://t.co/nC2l2p6rWr
— tatsuro matsubara (@blkcatman) October 23, 2015
長時間HDMIパススルーで使うには、USB給電にして1A以上出るモバイルブースターに繋ぐのも必要ですが、
その前に本体を満充電にしておく。そうしないと、充電の熱で10分くらいで映像が止まったりする…
(逆に、満充電にしてUSB給電モードで使うと30分は連続で動きました)
【THETA S TIPS】THETA SのHDMIやWebCamを使う方法
カメラビデオ切り替えボタンを押しながら電源をオン
Live放送のためにUSB給電する場合は満充電状態から使いましょう(発熱を防ぐため) pic.twitter.com/jv8cTimUBR
— GOROman (@GOROman) October 22, 2015
OculusRift CV1(コンシューマ向け)の発表も近づいてきたので、OculusVR社は自社OculusSDKやOculusRuntimeを積極的にアップデートしています。
また、最新版の各種ゲームエンジンでは組み込みでOculusRift対応を進めています。(UE4は前から、Unityは5.1から)
そんなタイミングですが、最新のOculusSDK0.7以降では動作未保証になってしまったOptimusノートPC+Unity5.1でOculusRiftDK2の動作環境を作ってみようと思います。 色々検討した結果、今回はExtendModeなら最低でも動きそうな0.5.0.1環境にします。
非プログラマ向けの手順をこれから書いていくので、分かる人は読み飛ばして「最後にまとめ」だけ読んで頂ければと思います。
(主婦ゆに本の、Unity5対応版も購入者は手に入れられるはずなので、ご検討ください)
UnityとOculusRuntime0.5.0.1はインストールしておいてください。 下の2個はダウンロードだけしておいてください。
一発撮りで申し訳ないですが、Unity上での操作手順を動画で撮ってみました。 8分程度です。
OculusRuntime 0.5で動作確認済みです。
このexeの価値は、Optimus環境でOculusConfigUtilityの机と椅子のデモ(Show demo scene)が、クラッシュする事が多いので、
Optimus機の方は、机と椅子のデモ代わりの普通の動作確認にお使いください。
https://copy.com/Y22DH1oo7bXSSvuB
この記事は、調べものをした途中の過程を記録する物で、成果物がある訳ではありません。
Unity上での動画再生は、歴史的な経緯によりデスクトップ版ではQuickTime Playerを用いた再生を行っています。
つまり、大雑把に言うと*.movファイルをムービーテクスチャとして使用できます。
しかしQuickTime Playerはイマドキの主流であるGPUデコードには消極的で、CPUデコードを行っています(調査不足の可能性有り、何らかの最適なエンコードを行えば可能?)
その為、例えば4k2kの60FPS動画を再生すると、いまどきのCPUが1コアフル占有してコマが落ちる、と言う状況です。
多くの場合は、動画解像度を下げたり、30FPSにすることで対処出来ますが、例えばOculusRift DK2(75Hz)で全周動画を再生する、と言うシチュエーションでは、非常に困ります。
これを何とかする為の定番の方法と、現在調査中の方法をまとめます。
Windows Media Foundationを用いた動画のGPUデコードが実装されています。
例えばAndroidならSoCに動画のGPUデコード機能が入っており、android.mediaplayerクラスを利用することで再生が行えます。
Unity用のandroidのネイティブプラグインを書いて、このmediaplayerクラスの再生中のバッファをGLのテクスチャにバインドする。という事を行えば、Exsonys7xxx番代やSnapdragon810などで4k2kの動画がコマ落ちなくUnity上で再生出来ます。
こういった処理は、UnityのアセットであるEasyMovieTexture(30ドル)を買うと、ネイティブプラグイン部分のソースコードも同梱されているので改造し放題です。
うーん、Androidって凄い…
http://www.renderheads.com/portfolio/UnityAVProWindowsMedia/ というアセットを使うことで、GPUデコード機能付きの再生が行えます。また、このアセットは外部の動画ファイルの動的読み込みにも対応しているため、Unity製の動画プレーヤーを作るような用途にも使えます。素晴らしい!
ただし、このアセットが200ドルします。うーん…お高い… そして全然Unity標準のMovieTextureと作法が異なるので、例えばAndroidとWindows両対応みたいな事をする時に、結構大変そうです。
NVIDIAのCUDA実装の動画のGPUデコードを利用して、直接DX11のテクスチャバッファに動画の絵を毎フレーム書き込むネイティブプラグインを作成したいです。
これは、上記UnityAVProの機能限定(そしてNVIDIA GPU限定)版になる代わりに、再生負荷が低く出来る予感がします。
OpenCV 3.0.0rc1 のソースやサンプルを見てみると (@dandelion1124 さん 超助かりました!教えてくれてありがとうございます) BUILD_opencv_cudacodecとWITH_NVCUVIDをONにしてOpenCVをビルドして
Cudaを使った動画再生 https://github.com/Itseez/opencv/blob/master/samples/gpu/video_reader.cpp DX11テクスチャへの書き込み https://github.com/Itseez/opencv/blob/master/samples/directx/d3d11_interop.cpp を組み合わせたネイティブプラグインを作成して
Unity側で TextureのGetNativeTexturePtrをプラグインに受け渡してやる http://docs.unity3d.com/ScriptReference/Texture.GetNativeTexturePtr.html
という感じで 、望む物が出来そうな気がします。
OpenCVを使っているのは、単純に全部入りで楽そうだなあ、と思っただけなので、CUDAとDX11を生で叩いても同じ事が出来ると思います。(ウーン、UnityがOpenGLモードだと、もっと簡単な気がします。OpenCVやCudaとOpenGL仲良いですしね。でもOculusRiftのSDKはDirectX11ネイティブ対応なので、今回はDX11ですねえ)
残念ながら直近でまとまった時間が取れ無さそうなので、ここまで調べた時点で力尽きてしまいました。
しかし、UnityのMovieTextureは、大いに改善の余地がありそうなので、例えばCUDAじゃなくてOpenCLを使って汎用的な動画のGPUデコードなどが出来るアセットとかが50ドルくらいで売ってたら、人気になりそうですね。
どなたか、作りませんか!と提案してこの記事は終わります。
追記:MP4デコーダをCUDAのSDK提供のまま使って、アセット作って売るぞ!と言う場合は、一度NVIDIAの人にお伺いを立てたほうが良さそうです。うーん、知財周りは大変・・・
@izm 動画再生周りは特許が絡むことが多いのでお気を付け下さい。 http://t.co/7K2G0veMkT > MPEG LA ロイヤリティの所を参照
— うえした (@ueshita) 2015, 6月 3