Home » 【XR Kaigi 2021】VRアプリをどう作る?UnityでのVRアプリ制作手法 2021年最新版


セミナー 2021.12.30

【XR Kaigi 2021】VRアプリをどう作る?UnityでのVRアプリ制作手法 2021年最新版

国内最大級のVR/AR/MRカンファレンス「XR Kaigi」が今年も開催されました。今年の「XR Kaigi 2021」はオンラインカンファレンス「XR Kaigi Online」(11月15日~17日)と、リアル会場での展示・体験会「XR Matsuri」(11月25日・26日)のハイブリッドで実施。XR Kaigi Onlineでは、3日間の期間中に50以上のセッションが行われました。

今回はその中から、11月17日に行われたユニティ・テクノロジーズ・ジャパンのセッション「キャッチアップ!『Unity xRアプリ開発 最新情報』 2021年 最新版」をレポートします。登壇者はユニティ・テクノロジーズ・ジャパンの高橋忍氏。セッションでは、Unityを使ったVRアプリ制作における最新の基本手法が紹介・解説されました。

VR デバイスとプラグイン

セッションはまず、VRデバイスとUnityでの開発環境構築の解説から。

現在一般に使用されているVRデバイスは、大きく「スタンドアロン型」と「PC接続型」の2つに分けられます。スタンドアロン型はOculus Quest 2に代表されるような、SoCやOSを内蔵しデバイス単体でアプリが動くVRデバイス。PCVRはPCでアプリを動かし、レンダリングされたコンテンツを転送して体験するタイプのVRデバイスです。

PCVRであればUnityから直接デバッグをすることができるので、効率よく開発を進められます。なお、Oculus Quest 2はOculus Linkの機能を使うことによってPCVRとして使うことが可能です。


(PCVRならUnityから直接デバッグ可能。効率よく開発を進められると高橋氏)

VR開発のためのパッケージに関して、Unityには最初からXR SubsystemというVR開発向けの環境が用意されています。

開発を行う際に追加する必要があるのは、アプリケーションを各VRデバイスに対応させるための「XR Plugin Management」、各VRデバイスごとに提供されている専用プラグイン、開発を便利にしてくれるSDK「XR Interaction Toolkit」の3種類です。


(UnityでのVRアプリ開発環境構成。セッション公開時点でのUnity推奨バージョンは2020.3 LTS以降)

XR Plugin Managementの下に入るプラグインは、OculusとWindows Mixed Realityに関しては専用(ネイティブ)のものがあります。HTC VIVEについては「Open XR Plugin」に統合されており、そちらが利用可能。なお、Open XR Pluginを使ってQuest / WIndows Mixed Realityの開発をすることもできます。


(QuestやWindows Mixed RealityもOpenXRに対応しつつある)

HDRPを利用した開発環境の構築

今回のセッションでは、UnityのHDRP(High Definition Render Pipeline)のサンプルシーンをVRデバイスに対応させ、Oculus Quest 2 で入ることを目標に進められました。

まずはHDRPについての設定です。プロジェクト上部バーのWIndowsから「Windows」→「Render Pipeline」→「Render」→「HD Render Pipeline Wizard」と進んでいくと設定ウィザードが開くので、ウィザードのタブを「HDRP + VR」に変更。いくつか警告が出る場合がありますが、Fixボタンを押していくだけで対応できます。

次にパッケージの導入。まず「XR Plugin Manager Manager」ですが、上部バーの「Edit」→「Project Settings」と進むと、左の項目に「XR Plugin Management」があるのでそれを選択します。

今回はQuest 2での開発なので、Plugin Management を開いて「Oculus」を選択。するとPlugin Management の下にOculusの項目が追加されるのでそれを開き、「Stereo Rendering Mode」を「Single Pass Instansed」に変更します(セッション公開時点ではマルチに未対応)。


続いて「XR Interaction Toolkit」の導入を行います。同SDKはセッション公開時点ではまだプレビュー版のため、デフォルトの状態ではPackage Managerに表示されません。まずはその表示設定から行います。

まず、「Window」→「Package Manager」と進み、Package Managerを開きます。そこで右上の歯車を押し「Advanced Project Settings」を開きます。すると中央付近に「Enable Preview Packages」と「Show Dependencies」という項目があるので、チェックボックスをチェック。これでプレビュー版のパッケージも表示されるようになります。

この状態でPackage Managerから「Unity Registry」を表示させると、「XR Interaction Toolkit」が項目に表れるのでインストール。以上でパッケージの導入は終了です。


VR空間に入る

ここからはヘッドマウントディスプレイ(HMD)でVR空間に入る方法についての解説です。

「VR空間に入る」には、HMDをカメラとする(同期する)ことで、HMDの位置情報と角度情報をカメラに転送・上書きする必要があります。この処理をしてくれるのが「Tracked Pose Driver」というコンポーネントです。

手順としては、Tracked Pose Driverやモーションコンポーネントなどがまとまった「XR Rig」 というコンポーネントを追加します。実際の作業としては、Main Cameraを削除してXR Rigを追加するだけです。

XR Rig の中には、プログラムにより位置を操作するときに使用するオフセットやMain Camera、そしてモーションコントローラーを扱うためのオブジェクトが用意されています。

「PlayerControllerFPS」の中にある「Main Camera」を削除し、「XR Rig」を追加すれば作業は終了(削除するためにはPlayerControllerFPSのPrefabをUnpackする必要あり)。これでQuest 2を使ってワールドに入れるようになりました。

注意点として、「PlayerControllerFPS」→「XR」と進んでいくと、「Device-based」の中の「XR Rig」と「XR Rig(Action-based)」の2種類が存在します。今回のようにOculusのプラグインを使う場合はdevice-base、Open XRのプラグインを使う場合はAction-basedを選択します。

モーションコントローラーの設定

次にモーションコントローラーの設定を行います。ここでは(1)コントローラーの3Dモデルの設定、(2)コントローラーから出るRay(指示棒)の設定、(3)振動の設定、の3つを行います。

(1)3Dモデルの設定

まず、コントローラーの3Dモデルを設定します。先ほど追加したXR RigのCamera Offsetの中に、右手と左手それぞれのコントローラーに関するオブジェクトがあるので、model Prefabに使用したいコントローラーモデルを設定します。

(2)Ray(指示棒)の設定

次にRay(コントローラーから出る指示棒)の設定。Rayの設定変更はXR Ray Interactorコンポーネントで行うことができます。例えば何か対象を操作するときには「Straight Line」として直線のRay、移動に使用するなら「Bezier Curve」など曲線のRayを使用するのがおすすめとのこと。

ただし、初期設定のままだとコントローラーの3DモデルによってはRayの位置が3Dモデルと重なってしまう場合があります。その場合、Rayの下位に位置調整用の空のGameObjectを作り、それをModel Parentとセットにすることでモデルの位置を調整することが可能です。


また、コントローラーを使った操作としては各種ボタンやスティックの操作があります。セッションではそれらの実装方法について、各種ボタンの対応とサンプルコードが紹介されました。


(「controller.InputDevice」というメソッドでデバイスの取得、「TryGetFeatureValue」というメソッドで各種ボタンが押されているかの状態を取得できる)


(コントローラーで「Aボタンが押されているかどうか」を判定するコード例)


(コントローラーのジョイスティックでキューブを動かすためのコード例)

セッションではまた、簡単な処理であればインスペクターの操作だけで行うことができるコンポーネントも紹介されました(別途追加が必要)。


(コントローラーの簡単な動作をインスペクターだけで処理するコンポーネント)

(3)振動の設定

また、モーションコントローラーの振動も設定できます。振動については、Intensity(強さ)とDuration(長さ)の変更が可能です。

VR空間内の移動

次はVR空間内を移動する方法の解説。空間内の移動では「Locomotion System」という移動方法が用意されています。これは前出のRayを使ってテレポート移動する移動方法です。

移動に関するコンポーネントには「Teleportation Provider」「Teleportation Area」「Snap Turn Provider」などがあります。これらのコンポーネントは「XR」→「Device-based」→「Locomotion System」と追加するだけですべて導入することが可能です。

「Snap Turn Provider」はスティックを使用して、指定した角度だけ回転するためのコンポーネント。長押しで無段階回転しないようし、3D酔いを防止する機能です。

また、移動先の指定として「Teleportation Atea」というコンポーネントがあります。これはテレポート可能なObjectを設定するためのコンポーネントです。

また、Snap Turn Providerとは逆に、スティックで無段階で移動・回転できるようにするコンポーネント「Continuous Move Provider」「Continuous Turn Provider」も存在。便利なコンポーネントですが、VR酔いしやすくなるというデメリットもあります。

HDRP 品質向上

ここまでの内容でVR空間内に入ることができるようになりました。続いては、VR空間内の画質向上のためのテクニックが紹介されました。

HDRPのサンプルシーンは十分高画質ですが、デフォルトのままだと物体の角などに少しジャギーが存在しています。相応のマシンスペックは必要になりますが、細かな描写をキレイにする機能がUnityには備わっています。

まずは「Project Settings」→「Quality」→「HDRP」と進み、その中にある「HDRPMediumQuality」のRendering設定、Lit Shader Modeを「Forward Only」に、Anti-aliasing Quality を「MASS 8x」に変更します。

もうひとつ、「Project Settings」→「HDRP Default Settings」と進み、Rendaring設定から「MSAA within Forward」をチェック。この設定でプロジェクトを実行すると、品質が向上したVRを体験することができます。

この他にも、「Post Processing」という項目から、露出やホワイトバランスなど、VR空間内の画質に関するさまざまな調整が可能になっています。

その他のTips

セッションの残りでは、VRアプリ開発に役立つ細かなテクニックが紹介されました。

UIボタンを使う

「XR Interaction Toolkit」には、VR空間内に配置できる透明なUI Canvasが入っています。このCanvasの上に通常のボタンを設置することで、VRでもUIボタンを使用することができます。

Cinemachineでトロッコ体験

また、Unity には映像を撮影するために機能も搭載されています。その中のひとつがCinemachineです。

例えば「Dolly Track With Cart」という機能を使うと、空間内に仮装の線路を引き、その上でDolly Cartというオブジェクトを走らせることができます。この機能を使うことで、人やオブジェクトがトロッコに乗って動いてるかのように見せる演出が可能となります。


2D/VRの切り替え

最後は2DとVRを切り替える手法についての解説。プロジェクトが2DなのかVRなのかは、XR Subsystemが動いているかどうかで決まります。UnityではXR Plugin Managementのチェックボックスのオンオフで2DモードとVRモードを切り替えることができます。


2DモードとVRモードの切り替えはプログラムでも実行可能。セッションではモードを切り替えるスクリプトの例が紹介されました。


(2DモードからVRモードに切り替えるスクリプト例)


(VRモードから2Dモードに切り替えるスクリプト例)


(ボタンで2DとVRを切り替えられるようにすれば、PCでは2Dで見せ、PCVRが使える環境下ではVRで見せるといったことが可能)

セッションのまとめ

Unity本体も各種ツール・プラグインも年々使いすくなっているという高橋氏。特にプラグインに関しては統合が進み、ゆくゆくはOpenXRに統合されるのではないかと言います。

また、VRコンテンツも高画質化が求められる時代になったとし、HDRPも活用しつつ、UnityでさまざまなVRアプリケーションを開発して欲しいと述べてセッションは終了しました。


VR/AR/VTuber専門メディア「Mogura」が今注目するキーワード