RGBCameraRecord で指定できるオプションを調べてみた
どうも、かげさんです(^^)/
あなたがこの記事を読んでいるのは何回目でしょうか?
初めての方、いらっしゃい!
複数回目の方、再訪問ありがとです(・∀・)
「NRSDK 1.9.3 で実行中プログラムの見た目を録画ができた! ユニティちゃんが動いてます!(まとめ)」に書いたように Nreal グラス(Nreal Light、Nreal Air)で視界の動画を撮影することができました。
かげさんが作った検証用のプログラムは NRSDK のデモである RGBCameraRecord を参考にして作成しました。
このデモを参考にして録画する時は、録画オプションを指定できます。
この記事では、録画オプションについて調べたことを紹介しますね。
オプションはコンボボックスが3つとチェックボックスが1つで指定します。
上の図は、3つのコンボボックスを全部開いた状態にしたものです。
コンボボックスは左から「解像度」、「録画対象」、「録音対象」となっています。
コンボボックスに隠れているチェックボックスは「useGreenBackGround」です。
解像度について
検証前、一番左は録画品質かなと思ったのですが、実際に録画して確認したところ解像度でした。
解像度コンボボックスの選択による動画録画の影響は下記の通り
コンボボックスの内容 | 解像度 | 備考 |
---|---|---|
High | 1920 x 1080 | 標準解像度の1.5倍(フルHD)だが、動作しない |
Middle | 1280 x 720 | 標準解像度 |
Low | 640 x 360 | 標準解像度の半分 |
正常動作するのは、Middle と Lowで、High は正常動作しない。
High を選択して録画すると、Nreal グラスに何も映らなくなり、スマホでホームボタンを押してもアプリケーションの終了ができない状態になる。
動作しないのになぜ High の解像度が分かったかというと NRSDK のソースを確認したからです。
ヒントになったのは、Middle で 1280 x 720 、Low で 640 x 360 の動画が撮れたことだ。
動画の解像度自体は、VLC Media Player でスクリーンショットを撮って確認した。
この解像度を参考にして NRSDK 内のソースを見てみた。
具体的には、Unity プロジェクトの NRSDK のフォルダのサブフォルダを含めて拡張子 .cs (C#の拡張子)で検索をかけたところ、Assets\NRSDK\Scripts\Capture\NRVideoCapture.cs にあるメソッド SupportedResolutions に 1280 x 720 を標準解像度として、High だと x 3 ÷ 2 つまり、解像度を 1.5 倍にする計算処理があった。( x 1.5 としていないのは、計算結果が浮動小数点型にならないよう整数型を維持させるためだと思う。)
同じメソッド内には、Low だと ÷ 2 つまり、解像度半分にする計算処理があった。
このことから、標準解像度の 1.5 倍のフルHDサイズ(1920 x 1080)が High の解像度と判断した。
で、なぜ High だと動作しないかだが、これはおそらく Nreal Light の RGB カメラの解像度が 1280 x 720 なので、そこまでしか対応できないからじゃないかと思う。
こう考えると辻褄が合うんだよねぇ。
録画対象について
続いて録画対象だ。
こちらはコンボボックスの内容を見て想像した通りで下記のようになっていた。
コンボボックスの内容 | 動作 |
---|---|
Blend | RGBカメラで撮影した内容 + プログラムで処理した CG(CG 部分は加算ブレンド)を表示 |
RGBOnly | RGBカメラで撮影した内容のみ表示 |
VirtualOnly | プログラムで処理した CG のみ表示 |
プログラムで処理した CG を「Virtual(仮想)」と呼んでいるようだ。
MR(Mixed Reality:複合現実)は、AR(Augmented Reality:拡張現実)を発展させたもの何だし、VR(Virtual Reality:仮想現実)みたいな 「Virtual(仮想)」じゃなくても良いんじゃないかと思うんだが…
加算ブレンドとは、真っ黒(R;0、G:0、B:0)を透明として扱い、画像を重ねて表示する方法だ。
Unity 上で背景黒の部分が、透明扱いになって透明になった部分は、背景である RGB カメラで撮影した映像が映ることになる。
なお、撮影された動画では、プログラムで処理された CG の真っ黒以外が半透明ではない状態で撮影されるが、実際に Nreal グラス越しに見えているのは、CG 部分は背景の明るさによっては半透明に見える。
また、Nreal グラスは、サングラス型なこともあり実際に見えている風景は、撮影された風景より暗く見えている。
つまり、実際に Nreal グラス越しに見えているモノと撮影されたモノは、完全一致した状態ではない。
Nreal グラス越しに見えているように見せかけた映像になっているということだ。
実際に使ってみた印象では録画対象で RGBOnly を使うことは無いんじゃないかと思った。
録音対象について
続いて録音対象だ。
こちらはコンボボックスの選択肢が全部は見えていないのでソースを見て補って書いた。
コンボボックスで Application までしか見えていない2つは Assets\NRSDK\Scripts\Capture\NRVideoCapture.cs にある AudioState の enum から ApplicationAudio と ApplicationAndMicAudio だと思われる。
また、この記事を書いた段階では自作アプリでサウンド処理を一切書いていないため、実際の動作確認は不十分である。
コンボボックスの内容 | 動作 |
---|---|
MicAudio | Nreal グラスのマイクから録音 |
ApplicationAudio | アプリケーションで鳴らす音を録音 |
ApplicationAndMicAudio | アプリケーションで鳴らす音を録音 + Nreal グラスのマイクから録音 |
動作確認は、サウンド処理を実装してからになるので後日書きます。
グリーンバック使用について
「useGreenBackGround」は、文字通り、プログラムで処理するCGで透過する背景部分を「緑の背景」で塗りつぶすものだ。
用途としては、これと別の動画をブレンド表示するとかで使うんだと思う。
結局、画質を上げるオプションは無かったので、画質は、Nreal Light より Nreal Air が上みたい。
ここまではOKだ
コメント
このブログの新着コメントをRSSリーダに登録する為のxml