Unity のパノラマ動画機能によって以下のことが可能になります。
Unity は、正距円筒図法によるレイアウト(緯度・経度)とキューブマップによるレイアウト( 6 フレーム)の 180 度動画と 360 度動画に対応しています。
正距円筒図法の 2D 動画のアスペクト比は、 360 度のコンテンツの場合は 2:1 、 180 度のコンテンツの場合は 1:1 です。
キューブマップ 2D 動画のアスペクト比は、面のレイアウトによって、 1:6 、 3:4 、 4:3 、または 6:1 になります。
Unity エディターでパノラマ動画機能を使用するには、パノラマ動画クリップにアクセス可能であるか、その作成方法を理解している必要があります。
このページでは、エディターにパノラマ動画を表示するための以下の手順について解説しています。
ビデオプレイヤー で、動画ソースの再生ターゲットをレンダーテクスチャー に設定する。
レンダーテクスチャーを受け取るスカイボックスマテリアルを 1 つセットアップする。
そのスカイボックスマテリアルを使用するようにシーンを設定する。
(注) この機能は大量のリソースを消費します。ヴィジュアル品質を高めるには、可能な限りの最高解像度(多くの場合 4K か 8K )のパノラマ動画を使用してください。サイズの大きな動画のデコーディングにはより多くの演算能力と資源が必要です。ほとんどのシステムにおいて、動画デコーディングの可能最高解像度の限界があります(例えば、多くのモバイル端末では HD や 2K が限界であり、旧型デスクトップでは 2K や 4K が限度の場合もあります)。
使用したい動画をアセットとして Unity にインポートしてください。ビデオプレイヤーを作成するには、動画アセットをプロジェクトビューから Unity のヒエラルキービューの空の領域にドラッグします。これにより、デフォルトでは、コンポーネントがデフォルトカメラに全画面表示で動画を再生するように設定されます。 再生ボタン を押すと再生が行われます。
この挙動を、レンダーテクスチャーをターゲットにして再生されるように変更する必要があります。そうすることで、表示を具体的に制御できるようになります。この変更を行うには、メニューから Assets > Create > Render Texture の順にアクセスしてください。
レンダーテクスチャーの Size を動画に正確に一致させてください。動画のサイズを確認するには、 Assets フォルダー内で該当の動画を選択してインスペクターウィンドウを開いてください。下方にスクロールして動画のプレビューが行われる箇所を表示し、プレビューウィンドウで動画名を選択して名前を Source Info に変更してください。
次に、レンダーテクスチャーの Depth Buffer オプションを No depth buffer に設定してください。
ここで Video Player インスペクターを開き、 Render Mode を Render Texture に切り替えます。新規のレンダーテクスチャーをアセットビューから Target Texture スロットへドラッグしてください。
Play モードを開始し、正常に機能していることを確認してください。
動画は Game ウィンドウでは描画されませんが、レンダーテクスチャーアセットを選択すれば、そのコンテンツが各フレームで更新されているのを確認することができます。
シーンの背景としてパノラマ動画をレンダーするには、デフォルトのスカイボックスを、その動画コンテンツに置き換える必要があります。
これを行うには、新規マテリアルを 1 つ作成します( Assets > Create > Material )。この新規マテリアルのインスペクターを開き、 Material’s Shader を Skybox/Panoramic に設定してください( Shader < Skybox < Panoramic)。
レンダーテクスチャーを、アセットビューから、作成した新規マテリアルのインスペクターのテクスチャースロットへドラッグしてください。
パノラマ動画を正常に表示するためには、動画コンテンツの種類(キューブマップまたは正距円筒図法)を正確に特定する必要があります。キューブマップ式コンテンツ([例]静的スカイボックステクスチャーに一般的なa cross and stripレイアウトなど)の場合は、 Mapping を 6 Frames Layout に設定してください。
正距円筒図法のコンテンツの場合は Mapping を Latitude Longitude Layout に設定した上で、サブオプションを 360 degree か 180 degree に設定します。動画にフルの 360 度表示が含まれる場合は 360 degree を選択し、正面方向のみの 180 度表示の場合は 180 degree を選択してください。
マテリアル インスペクター下部の Preview の領域で各方向にパンを行い、コンテンツが正常に表示されていることを確認してください。
最後に、新しいスカイボックスマテリアルを必ずシーンに接続してください。
Lighting ウィンドウを開きます (Window > General > Lighting)。
作成した新規スカイボックス マテリアル アセットを、 Environment の下の最初のスロットにドラッグ&ドロップしてください。
Play を押すと、動画がシーンの背景として表示されます。
シーンカメラの角度を変更すれば、スカイボックスの各部(つまりパノラマ動画の各部)を表示することができます。
ソースビデオにステレオコンテンツがある場合は、Player 設定(メニュー: Edit > Project Settings から Player カテゴリを選択し、XR Settings パネルを開きます)でVirtual Reality Supportを有効にします。これにより、スカイボックス/パノラママテリアルで追加の 3D Layout オプションのロックが解除されます。 3Dレイアウトには Side by Side、Over Under、None(デフォルト値)の3つのオプションがあります。
左眼のコンテンツが左に、右眼のコンテンツが右に配置されている動画の場合は、 Side by Side 設定を使用してください。左右のコンテンが動画内で上下に配置されている場合は Over Under を選択してください。Unity は、その時点においてどちらの眼が描画されているかを検知し、その情報を Single Pass Stereo rendering によって Skybox/Panoramic シェーダーへ送信します。シェーダーには、 Unity が各眼のコンテンツを VR 内に描画する際に、この情報を基にして動画のもう半分を正しく選択するロジックが実装されています。
360 度ではない 3D 動画(つまりスカイボックスマテリアルを使用すべきではない動画)の場合は、カメラの Nea/Far Plane レンダーモード使用時に、同じ 3D Layout が Video Player コンポーネント内で直接利用できます。
キューブマップ動画を使用する場合、ビデオプレイヤーを 2D レンダーテクスチャーにレンダーして全く同じキューブマップレイアウトを維持する代わりに、直接レンダーテクスチャーキューブにビデオプレイヤーをレンダーすることが可能です。
これを行うには、レンダーテクスチャーアセットの Dimension を 2D から Cube に変更し、レンダーテクスチャーの Size をソース動画の個々の面のサイズに正確に一致させてください。
例えば、 4 x 3 の横向き十字レイアウトのキューブマップでが 4096 x 3072 の動画の場合、レンダーテクスチャーの Size を 1024 x 1024 ( 4096 / 4 および 3072 / 3 )に設定します。
キューブのターゲットテクスチャーへのレンダリング時、ビデオプレイヤーは、ソース動画に十字型または直線型レイアウトのキューブマップが含まれると仮定しています。(どちらのレイアウトかは動画のアスペクト比によって特定されます)。その後ビデオプレイヤーは、レンダーテクスチャーの各面を正しいキューブ面で埋めていきます。
上記の結果作成されたレンダーテクスチャーキューブをスカイボックスとして使用してください。これを行うには、マテリアルを 1 つ作成し、上述の Skybox/Panoramic マテリアルの代わりに Skybox/Cubemap を Shader ( Shader > Skybox > Cubemap )としてアサインします。
3D コンテンツを取り入れるためには、その動画の幅( Side-by-Side レイアウトの場合)または高さ( Over-Under レイアウトの場合)の倍のサイズが必要です。
多くのデスクトップハードウェア ビデオデコーダーでは 4K 、また多くのモバイルハードウェア ビデオデコーダーでは 2K 以下という解像度制限があり、そういったプラットフォームではリアルタイム再生の解像度が制限されることにご注意ください。
ビデオトランスコーディングを利用してパノラマ動画の低解像度バージョンを作成できますが、左右の 3D コンテンツの間のエッジや、キューブマップの面とその隣接する黒い部分の間にブリーディングが発生しないように予防策が必要です。一般に、視覚的なアーティファクトを減らすには、2 のべき乗の次元でビデオをオーサリングし、2 のべき乗の次元にトランスコードする必要があります。
2017–10–25 公開ページ
[2017.3] から対応となった 2D・3D パノラマ動画機能(https://docs.unity.cn/2017.3/Documentation/Manual/30_search.html?q=newin20173) NewIn20173