web-dev-qa-db-ja.com

Unity用Google Cardboard SDKを使用してVRビデオプレーヤーを作成する方法

Unity用のGoogle Cardboard SDKをダウンロードしました。私は元気でVRプロジェクトを作成できます。セットアップは問題なく、すべてが正常に機能しています。

VRアプリの初心者です。 VRアプリに足を踏み入れたところです。

デフォルトのGoogle Cardboard Youtubeプレーヤーと同様に、Android用の独自のVR対応ビデオプレーヤーを作成する予定です。

誰でも私にリンクを提案したり、このアプリの開発を案内してくれますか?.

7
Rao

Scott Driscollの答えは完全に機能します。 Easy Movie Texture Unityプラグインを機能させるためにいくつかの初期の問題がありましたが、最終的にそれを理解し、問題なく動作しました。これで、iPhone 6の球の内側のテクスチャとして360ビデオが実行されるようになりました。そうなるとは思いませんでした。

Macで作業するために、私がしたことは次のとおりです。

  1. Unity Asset StoreからEasy Movie Textureプラグインをダウンロードします
  2. Assets/EasyMovieTexture/SceneからDemo Sphereデモシーンを開きます。
  3. プロジェクトに新しい(空の)プレハブを作成し、球体ゲームオブジェクトをDemo Sphereシーンからプレハブにドラッグします。
  4. Cardboardシーンを再度開き、新しいvideosphereプレハブを階層にドラッグします。
  5. ソース360ビデオをQuicktimeで開く
  6. ファイル->エクスポート-> 720p
  7. ファイル拡張子を「.mov」から「.mp4」に変更します
  8. 新しいmp4ファイルをプロジェクトのAssets/Streaming Assetsディレクトリにドラッグします。注:Unityを強制的にOGGに変換するため、メニューシステムからインポートしないでください。
  9. Videosphere GameObjectの「Media Player Ctrl」スクリプトコンポーネントで、「Str_File_Name」フィールドを見つけ、完全なファイル名を入力します。文字列「mymovie.mp4」の一部として拡張子を必ず含めてください。

それがすべてだと確信しています。それが他の人々がこの問題に固執しているのを助けることを願っています。スコット・ドリスコール、ありがとう!

最後に、エディタでのプレビューではなく、電話でのみビデオを表示できます。この方法でうまくいかなかった方がいいでしょうが、実際に解像度と配置の最初の問題が解決されたら、エディターでシーンを実行するたびにビデオを見る必要はありません。

11
Shannon Perkins

これを行うための主な手順は次のとおりです。

  1. 正四角形のUVマッピングとカメラの周りの内向きの法線で球を追加します。
  2. その球のテクスチャで映画を再生するためのプラグインを購入します。 Easy Movie Texture をお勧めします。
  3. プラットフォームと互換性のあるmp4sまたはogg vorbisファイルを使用します。これは電話とOSに依存します。

詳細: http://immersivetechblog.foundry45.com/2015/07/31/implementing-360-video-in-unity-for-gear-vr-and-cardboard/

8
Scott Driscoll

上記の回答を確認しましたが、すべてにEasy Movie Texture Unityプラグインが必要であるか、コード化する必要があります。これには、資産を購入したり、コード化したりする必要のない別の簡単な解決策もあります。 Oculusは、ビルド済みの無料サンプルフレームワークを提供しており、問題なく使用できます。以下のソリューションは、Unity用のフォトビューアとビデオビューアの両方を作成する方法を示しています。

360度PhotoViewerの作成:

  1. ブレンダーに行き、すべての近接オブジェクト(存在する場合)を削除し、icosphereを作成し、サブディビジョンを6のような球のようになるまで増やし、[UVの生成]をクリックします(これらのオプションは両方とも、[作成]タブの下の設定にあります。球に追加)を選択し、編集して法線の反転を選択すると、内側ではなく内側を確認して保存できます。
  2. Icosphereで保存したファイルをUnityのアセットフォルダーに移動します。
  3. GoogleVR SDKをダウンロードし、GoogleVRプラグインをアセットフォルダーにも入れます。(ここからダウンロードできます: https://developers.google.com/vr/unity/
  4. デフォルトで存在するメインカメラと指向性ライトを削除します。
  5. Icosphereアセットをプロジェクトに取り込みます。
  6. アセットフォルダーからプロジェクトにGVRメインを持ち込みます:GoogleVRプラグイン->レガシー->プレハブ-> GVRメイン
  7. パナロマまたは360°写真を撮影して、アセットフォルダーに入れます。
  8. この写真をアセットフォルダに入れて、シーンのicosphereの上に置き、再生を押します。 360度の写真を表示できるはずです。

360度MoviePlayerの作成:

  1. 手順1と同じです。
  2. 次に、Oculus開発者コンソールに移動し、このファイルをダウンロードして、アセットフォルダーに移動します。 https://developer3.oculus.com/downloads/game-engines/1.5.0/Oculus_Sample_Framework_for_Unity_5_Project/
  3. 上記でダウンロードしたこのファイルをアセットフォルダーに持ってきてください。
  4. あなたのassetsFolderでMoviePlayerを見つけてプロジェクトに持ってきてください。
  5. ダウンロードしたicosphereをアセットフォルダにも入れて、正しく見えるように少し拡大します。
  6. MoviePlayerサンプルスクリプトとオーディオソースをプロジェクトからMovieSurfaceのコンポーネントにコピーし、シーンの球のコンポーネントに追加します。また、球のコンポーネントのアニメーターを削除します。
  7. MovieSurfaceのMesh Rendererの下のマテリアルにあるMovie Playerマテリアルを持ち、球の上に追加します。
  8. これで、この球が360度のムービープレーヤーになり、アセットフォルダーにアセットとして保存します。
  9. 新しいシーンを作成し、ディレクショナルライトを削除して、保存したicosphereアセットをこのシーンに持ち込み、メインカメラを中央に移動します。
  10. MoviePlayer、プラグイン、ストリーミングアセット以外のプロジェクト内のスペースをクリーンアップするために、不要なアセットを削除します。
  11. プラグインがVRで再生できるように、目的のmp4をogvファイルに変換し、mp4ファイルとogvファイルの両方をストリーミングアセットフォルダーに入れて、MovieNameを変更して[再生]をクリックする必要があります。 360度のビデオ再生を確認できるはずです。

*デバイスで再生するには、ビルド設定に移動し、目的のプラットフォームを選択してすべてのシーンを削除し、[開いているシーンを追加]をクリックし、[プレーヤーの設定]の下の他の設定でサポートされているバーチャルリアリティをクリックします。 Androidの電話で再生するには、上記のようにGoogleVR SDKをダウンロードしてアセットフォルダーに入れ、アセットフォルダーでGVRViewerMainを見つけてシーンに入れ、チェックを外す必要があります。上記で行ったサポートされているバーチャルリアリティデバイスですべてをビルドして実行します(Unityで[play]を押すと、ゲームモードでビューを表示できるはずです)。それぞれのギアでビデオを表示できるはずです。 。

  • ビデオチュートリアルもありますが、新しいStackOverFlowプロファイルと共有できるのは2つのリンクのみです。
3
Pratham Sehgal

Unityのサポートはできませんが、JavaではOpenGL-ESでテクスチャを作成できます。

private static int GL_TEXTURE_EXTERNAL_OES = 0x8D65;
....
GLES20.glGenTextures(1, textureHandle, 0);
GLES20.glBindTexture(GL_TEXTURE_EXTERNAL_OES, textureHandle[0]);

これを使用して、表面テクスチャと表面を作成します。

SurfaceTexture surfaceTexture = new SurfaceTexture(textureHandle[0]);
Surface surface = new Surface(surfaceTexture);

そして、そのサーフェスをAndroid.media.MediaPlayerに渡します。

MediaPlayer mediaPlayer = new MediaPlayer(getContext(), uriToMyMediaFile, surface);

そのテクスチャをシーンの正方形にバインドし、これをフレームごとに呼び出します。

surfaceTexture.updateTexImage()

そして、mediaPlayer.start();を呼び出すとビデオが再生されます。

Unityが独自のJavaコードをバックグラウンドで実行するように記述できる場合、これはUnityからそのテクスチャをサーフェスにバインドする場合に機能します。

MediaPlayerで再生できないビデオストリームがある場合(ライブビデオチャットなど)、サーフェスをAndroid.media.MediaCodecでも使用できますが、多くの設定作業が含まれます。

1
Mog

これはUnity 5.6以降で非常に簡単になりました。

  1. オンラインで見つけるか、ブレンダーに移動してIcoSphereを作成してその法線を反転させるか、シェーダーを使用して通常の球で同じことを行うことができます。どちらの場合も、シェーダーにUnlitテクスチャを使用します。
  2. Unityにデフォルトで付属しているコンポーネントのビデオプレーヤーをこの球に追加します。
  3. このビデオプレーヤーに360度のビデオを追加します。オンラインリンクを追加することもできます。また、GoogleVRからSteamVRまで、幅広いプラットフォームで一貫して優れた性能を発揮します。

唯一の欠点は、デフォルトではモノスコピック画像/ビデオのみを再生することであり、ステレオスコピック画像/ビデオを実行するには、微調整が必​​要です。

1
Pratham Sehgal