Unity XR(VR/AR/MR) Update in 2017
Tags: unity3d, vr, ar, xr
Published: 2017-12-25 05:04:45

---
title: Unity XR(VR/AR/MR) Update in 2017
published: true
description: The progress of the Unity XR function in 2017
tags: Unity, VR, AR, XR
---

[この記事はUnity Advent Calendar 2017に参加しています。](https://qiita.com/advent-calendar/2017/unity)

UnityのVR機能は2017.2でXRと名を変え、多数の機能追加や仕様変更がありました。
この記事では2017.1から今月リリースの2017.3までの機能について一つ一つ概要を解説していきます。

# 2017.1

Unity 2017.1は.NET4.6対応やタイムライン追加など、本体の大幅な機能更新がメインでVRの更新はほとんどありませんでしたが、それでも大きめのものが2つありました。

### OpenVR SDKがPC版VR SDKサポートリストに標準追加
Unity5.xでは、unity VRサポートでOpenVR SDKを使う際には手動で追加する必要がありました。
それが2017.1から、標準でUnity VRサポートにOpenVR SDKも追加されました。
しかし、Oculus Riftを動作対象に加える際には注意が必要です。
Unity VRサポートの標準ではOculus SDKがOpenVR SDKよりも優先して配置されているため、
もしOculus Riftを検出するとOculus SDKで動作してしまいます。
これは、OpenVR(Vive)前提で開発を進めていたソフトをOculus Riftで動かした際に、OpenVR SDK向けのコンポーネントがOculus SDKで動作せず挙動がおかしくなったり、進行不可能になるなどの不具合を起こします。そのため、Oculus SDKを別途同じシーンに組み込み[UnityEngine.VR.VRSettings.loadedDeviceName](https://docs.unity3d.com/ja/540/ScriptReference/VR.VRSettings-loadedDeviceName.html)で接続されたHMDがOculusかOpenVR HMDかどうかを検出してプレイヤーのコンポーネントを切り替えを実装したり、Oculus SDKを外してOpenVR SDKのみで起動するようにリストを編集する必要があります。

### Ambisonic音源のサポート
2017.1から立体音源フォーマットのAmbisonicオーディオ形式のインプットと、Ambisonicデコードに対応したオーディオプラグインの利用がサポートされました。
現在Ambisonicデコードに対応しているメジャーなVRオーディオSDKは、[Oculus Audio SDK](https://developer.oculus.com/documentation/audiosdk/latest/concepts/book-audiosdk/)と[Google Resonance Audio SDK](https://developers.google.com/resonance-audio/)の2つとなっています。Unity標準オーディオの立体音響化をサポートするSpetializer Pluginとは独立して選択する事が可能なので、Ambisonicデコードには未対応の[Steam Audio](https://developers.google.com/resonance-audio/)と組み合わせることも可能です（Steam Audio自体はAmbisonicをサポートしているためUnityのAmbisonicプラグインフォーマットに未対応というステータスです）

# 2017.2

Unity 2017.2では、Unity 2017.1が嘘のように大幅な更新があり、AR機能も標準でサポートされた事からUnityEngine.VRがUnityEngine.XRに刷新されました。

### OpenVRがMac 64bit(Metal)に対応
6月のWWDCで発表されたSteamVRとHTC ViveのMac対応に合わせ、Unityでも標準で動作がサポートされました。

### Viveのモック動作に対応
これまで、VR HMDでの描画や挙動を確認する際は必ずHMDをPCに付けて動作させる必要がありました。Unity 2017.2で追加された「Mock HMD - Vive」をUnity VRサポートに加えて再生すると、HMDを繋いでいない状態でもViveと同じアスペクト比、投影行列、オクルージョンメッシュ、FOV、テクスチャ解像度を再現した状態でマルチパス、シングルパス共に両眼描画を再現して描画やパフォーマンスをデバッグする事が出来ます。エディタのGame Viewには分割された両眼テクスチャが描画されます。

### ARCoreのサポート
8月に発表されたAndroidのAR機能です。本来Unity 2017.2ではTangoに対応する予定でUnity 2017.2 Betaにも存在していましたが、正式版でARCore（汎用カメラ）に変更され、Tango（専用カメラ）アプリをUnityで開発する事は不可能になってしまいました。

### Daydream ViewでのVideo Async Reprojetionサポート
Daydream Viewで動画を滑らかに表示するため、Unityのレンダーループを介さず動画に直接アクセスするGoogle VRの機能がサポートされました。
Unityのテクスチャフィルタリングも無視して動画の描画を行う事ができるため、Daydream Viewでの動画品質が向上しました。DRM保護機能にもオプション対応しています。

### Windows Mixed Reality SDKのサポート
Windows Holographicサポートが刷新され、HoloLensとWindows Mixed Realityヘッドセットの両方にUWPプラットフォームのUnity VRサポートが対応しました。UWPプラットフォームを選択するとWindows Mixed RealityヘッドセットをOculusやViveのようにエディタ再生でデバッグする事も可能になっています。

### TrackedPoseDriverコンポーネント追加
これまでHMDや6DoFコントローラのポジショントラッキングを扱うには、各社のVR SDKを利用するか、[UnityEngine.VR.InputTracking](https://docs.unity3d.com/jp/540/ScriptReference/VR.InputTracking.html)でposition, rotationを個別に取得するコードを作成する必要がありました。Unity 2017.2ではTrackedPoseDriverが新設され、標準コンポーネントのGUIでGameObjectが頭（HMD）、右手／左手コントローラ、カラーカメラ（AR）などのポジショントラッキング対応デバイスのTransformを常時トラッキングする事が新規プロジェクト作成後即座に行う事が出来るようになりました。

### Stereo Instancingのサポート
これまでのUnity VRサポートでは、HMD向けの複数パネルの描画をパネルごとにテクスチャを分けて個別に行うMulti Passレンダリング、単一の巨大テクスチャにそれぞれの描画を行い描画コンテクストの切り替えを削減するSingle Passレンダリングの2種類がありました。（[参照](https://docs.unity3d.com/Manual/SinglePassStereoRendering.html)）
2017.2では、DirectX11の[RenderTarget Array Index](https://msdn.microsoft.com/en-us/library/windows/desktop/dn933226(v=vs.85).aspx?f=255&MSPPError=-2147217396)を用いてGPU Instancingの要領で両眼描画のインスタンシングを行う手法です。利用にはWindows 10、DirectX11（12も不可）、Forwardレンダリング専用と厳しい制約があります。
将来性はありますが、現在は実験的な機能でUnite Austin 2017時点ではMulti Passから27％、Single Passの8％のCPU時間削減という厳しい数字で、またフルスクリーンポストエフェクトなどの対応もSingle Passとは別途必要なため現在は実用が困難です。

### Vuforiaのサポート
老舗のメジャーなAR SDKであるVuforiaがUnityで標準サポートされました。XRサポートに改名されたPlayerSettingsのVRサポート欄から追加できます。

### EditorVRの基礎的なサポート
Unity5.x時代からEditorVR側で実装されていた機能がいくつかUnity 2017.2で実装されたため、互換性が向上しました。

### Player Settings APIでのVRサポートを取得・設定可能に(p4から)
PlayerSettingsクラスに Get/SetVirtualRealitySupported, Get/SetVirtualRealitySDK,GetAvailableVirtualRealitySDKsの3つが追加され、UnityEditor上で現在サポートしているVR SDKの列挙やエディタ拡張からの設定がプラットフォーム別に行えるようになりました。

# 2017.3

2017.3ではXRとは直接関係がありませんが、これまでのメッシュ頂点数65k制限が一気に4Gまで拡張されて超ハイポリゴンメッシュやポイントクラウドをUnityで直接扱えるようになったり、DirectX 12をエディタ再生できるようになるなどXRにも確実に関連する機能の強化が行われました。XRに関しては2017.2が盛り沢山だったので控えめに収まっていますが、それでもまだ大きめのものがあります。

### Depth Buffer Sharingのサポート
Windows MRとOculusでDepth Bufferの共有が追加されました。これは、Unity内のDepth BufferをOSやOculusランタイムに共有することでホログラフィックの焦点距離を安定化したりOculus DashのUIより手前にあるゲーム上のオブジェクトを半透明にすること等を可能にします。

### Daydream VRの6DoFスタンドアローンデバイスの対応
Daydreamの欄でポジショントラッキング対応の一体型デバイスに対応しました。しかし、この記事を書いている2017年12月現在、Daydream 6DoFスタンドアローンのデバイスはまだ発売予定が発表されていません。（Lenovoが開発中という事は6月のGoogle I/Oで発表されました）

### 試験的Scriptable Render PipelineのXRサポート

Unity 5.6の頃から開発が続けられているUnityの描画パイプラインをC#スクリプトで編集可能にするScriptable Render PipelineがXR上でも動作するようになりました。Scriptable Render Pipeline自体は[GitHub上](https://github.com/Unity-Technologies/ScriptableRenderPipeline)で開発が進められており、2018.1で正式版となる予定です。

### MacでのSingle Passサポート
2017.2の時点では対応していなかったSingle Passステレオレンダリングに対応し、パフォーマンスが改善しました。

### VRでのTerrain Treeが改善
これまで、VRでUnity標準のTerrainを使うとビルボードのRotationが大変な事になっていましたが、それが改善されビルボードとメッシュ描画の遷移が改善され、ビルボードテクスチャもsort-independentでアルファブレンディングやMSAAに対応しエイリアシングが改善しました。

### Jitter投影行列のXRサポート
Post Processing Stackなどで実装されているテンポラルアンチエイリアシング（TAA）に必要なJitterの投影行列がこれまで両眼描画に対応していないため、TAAを使うと左右で全く異なる結果が表示され実用できませんでした。2017.3でJitterの投影行列が両眼描画に対応し実用可能となりました。

### 動画プレイヤーの360度動画サポート
2017.3で新しく追加されたSkybox/PanoramicにUnity標準Video Playerに設定した180/360度動画のレンダーターゲットを入力する事で、Unity標準機能のみで180/360度動画を再生する事が可能になりました。（サイドバイサイド、上下配置のステレオ動画にも対応）
Video Player側はとくに変更されておらず、Skybox/Panoramicのようにマテリアル側での対応が必要なままなのでその点は注意が必要です。

# 2018.1の予定

来年リリース予定の2018.xでも、XRのサポートはまだまだ更新されていきます。ここでは公式の[ロードマップ](https://unity3d.com/jp/unity/roadmap)に書かれている中でXR関連の機能を書きます。

### AR機能のクロスプラットフォームサポート
Unity 2018.1ではGoogle ARCore/Apple ARKitの両方に対応したクロスプラットフォームの標準ARコンポーネントが新設され、より少ない手間で両対応のARアプリを作成することが可能です。

### 360度キャプチャの実装
エディタ上でもランタイムでも、Unityのキャプチャ機能でステレオ含む360度キューブマップをキャプチャする事が可能になります。2018.1時点ではExperimentalとなります。

# 終わりに

2017年はUnityで3回のメジャーバージョンアップがあり、そのどれにもXR機能のアップデートが含まれています。2018年も機能追加はどんどん行われていく予定です。新しい便利な機能やプラットフォームを活用して楽しくXR開発をしていきましょう！