Unity環境(HDRP)におけるVarjo XR導入プログラム

8 min read読了の目安(約8000字

概要

本記事では、Varjo XR-1に関してUnity環境向けの導入プログラムを紹介したいと思います。基本的には公式ページで解説されている内容になりますが、少しだけ注意点があるので良ければ参考にして下さいね。
また、本記事ではHDRPの設定方法を記載いたします。現在はURPも対応しているはずなので、自分で動かす機会があればまた記事にしたいと思います。

基盤となる開発環境構築方法は以下を参考にして下さい。

https://zenn.dev/jin_kei/articles/1dae4684eb4197

紹介内容

  1. Unity環境構築
  2. XR-1の位置/姿勢角の同期
  3. 背景の透過
  4. 物体の透過
  5. 実行結果の確認方法
  6. 複数アプリケーションの同時実行方法

1. Unity環境構築

1.1 Unity Editorのバージョン選定

VarjoのXR開発ではUnity XR SDKに対してVarjo Unity XR Pluginと呼ばれるプラグインを導入して開発を行います。しかし、このプラグインはUnityやHDRPの幾つかのバージョンで互換性の問題が発生します。

以下はVarjo公式の引用情報になります。

Unityバージョン ノート
2019.3.0f1-2019.3.14f1 動作する(HDRP修正パッチの適用が必要)
2019.3.15f1-2019.4.12f1 動作しない
2020.1.6f1 動作する(HDRP修正パッチの適用が必要)
2020.2.0b2 動作する
HDRPバージョン ノート
7.0.0-7.4.3 動作する(HDRP修正パッチの適用が必要)
7.5.1 動作する
8.0.0〜8.2.0 動作する(HDRP修正パッチの適用が必要)
9.0.0 動作する(HDRP修正パッチの適用が必要)
10.0.0 動作する

すでにUnityの特定のバージョンを使用している方は1.3項「HDRP修正パッチ適用方法」も行って下さい。1.2項では、私が動作確認したバージョンでの手順を紹介します。

  • (1) Unity公式から、バージョン2020.2.0b2のUnity Editor (64-bit)(UnitySetup64.exe)、およびWindows (IL2CPP) Target Support(UnitySetup-Windows-IL2CPP-Support-for-Editor-2020.2.0b2.exe)をダウンロードして、インストールする。
  • (2) Unity自体を初めてインストールした方は、同じくUnityHubをダウンロードして、インストールする。UnityHubインストール後、(1)でインストールしたEditorを選択する。

1.2 HDRPプロジェクト作成 + Varjo Unity XR Pluginの導入

  • (1) UnityHubから「プロジェクト」->「新規作成」->「2020.2.0b2」を選択し、テンプレートからHigh Definition RPを選ぶ。プロジェクト名を入力し、作成ボタンを押下する。
  • (2) プロジェクトが起動したら、「Render Pipeline Wizard」が表示されるので「Configuration Checking」はHDRPのまま、「Install Configuration Editable Package」を押下する。
  • (3) VarjoUnityXRPluginパッケージを追加します。Unity Editorの「Windows」->「Package Manager」を選択します。
    • (3.1) GitHub経由で追加する場合
      • (a) 「+」->「Add Packeage from git URL...」を選択し、https://github.com/varjocom/VarjoUnityXRPlugin.gitと入力し「Add」を選択します。
    • (3.2) ローカルにファイルをダウンロードして追加する場合
      企業でUnityを使用している方はプロキシの制限などでUnity Editor上から直接インポート出来なかったり、個人端末からのGitアクセス許可が無い場合もあるかと思いますので、ローカルに置いたファイルからダウンロードする方法を記載します。
      • (a) GitHubから「Download ZIP」でローカルにパッケージをダウンロードします。
      • (b) 「+」->「Add Packeage from disk...」を選択し、VarjoUnityXRPlugin.zipを解凍したフォルダ中にある「*/VarjoUnityXRPlugin-master/package.json」を選択する。

1.3 HDRP修正パッチの適用方法

前述した通り、もし既にUnityの特定のバージョンを使用している場合、すぐにバージョンを変更出来ない事情もあると思いますので本項の修正パッチを試してみてください。

修正パッチが必要ない場合に、適用してしまうとコンパイルが通らなくなってしまいます。適用前に本当に機能しないか挙動を確認し、適用前に戻せるようバックアップしてから行って下さい。

  • (1) VarjoHDRPPatch.zipをダウンロードし、解凍する。
  • (2) 解凍すると「VarjoHDRPPatch」というフォルダがあるので、フォルダごと自身の「Unityプロジェクト」->「Assetsフォルダ」内にコピーする。
  • (3) Unity Editorの「Edit」->「Render Pipeline」->「Fix HDRP bugs affecting Varjo XR Plugin」を選択し、「Continue」を押下する。

1.4 HDRPプロジェクトの設定

  • (1) 「Edit」->「Project Settings...」->「XR Plug-in Management」を開き、「Plug-in Providers」からVarjoを選択する。
  • (2)「Varjo」の設定項目から、以下の項目を変更する。
    • 「Stereo Rendering Mode」をMulti Passに変更する。
    • 「Opaque」のチェックを外す。
  • (3) 「Edit」->「Project Settings...」->「Quality」->「HDRP」を開き、「Rendering」->「Color Buffer Format」をR16G16B16A16に変更する。
  • (4) VarjoのMRレンダリングを開始する処理を追加する
    VarjoMixedRealityController.csの通りVarjo.XR.VarjoMixedReality.StartRender()を呼び出すことで、レンダリングが開始されますので、どこかの初期化から適当に呼び出して下さい。
    この例では、Create Emptyで適当にGame Object作って適用しても良いですし、カメラとかに付けて貰っても良いです。
VarjoMixedRealityController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class VarjoMixedRealityController : MonoBehaviour
{
    void Start()
    {
        Varjo.XR.VarjoMixedReality.StartRender();
    }
    
    void Update()
    {        
    
    }
}

2. XR-1の位置/姿勢角の同期

この設定を行うことで実物のXR-1の挙動がUnity中のカメラに反映されるようになります。

  • (1) 自身がシーン中に配置しているメインカメラにTracked Pose Driverというコンポーネントを追加する。
  • (2) 以下の設定になっていることを確認する。
    • 「Pose Source」がCenter Eye – HMD Referenceであること。
    • 「Tracking Type」がRotation and Positionであること。

この設定でXR-1の挙動と同期しているはずですが、もし位置が全然合わないときはSteamVR Base Stationが最低2台認識出来ているか確認して下さい。(挙動確認程度であれば4台無くても大丈夫だと思います。)

3. 背景の透過

まずはHololens2のように、周辺の背景視界が実世界(カメラ映像)にする方法を説明します。

  • (1) 自身がシーン中に配置しているメインカメラの「Camera」コンポーネント->「General」を開き、以下の項目を変更する。
    • 「BackgroundType」をSkyからColorに変更する。
    • 「BackgroundColor」のRGBAを(0,0,0,0)に設定する。

5項を参考に実行結果を確認してみましょう。

4. 物体の透過

本項では、特定の物体を実世界(カメラ映像)にする方法を説明します。
こちらの用途としては、例えば、CADで正確に作られた自動車の運転席モデルに透過を適用することで、窓外視界の景色はUnityで生成したもの。車の運転席は実機を映して、プロトタイプの感性評価をする使い方が考えられます。
3項は上述した内容と逆のことが出来るので、窓外視界の景色は本物を映し、設計段階の運転席のCADモデルを描画することで、設計の机上検討を行うのに役立ちそうですね。

  • (1) Materialを作成して、以下の項目を変更する。
    • 「Shader」をHDRP/Unlitに変更する。(カスタムシェーダーにして貰っても構いません)
    • 「Surface Inputs」のColorのRGBAを(0,0,0,0)に設定する。

もし上記の設定で透過しない場合は、MaterialのAlpha Clippingの閾値を0に設定して下さい。

  • (2) Cubeなどを配置し、(1)で作成したMaterialを適用する。

5項を参考に実行結果を確認してみましょう。

5. 実行結果の確認方法

プログラムの実行結果はUnity Editorではなく、Varjo BaseのVarjo Analystics Windowで確認します。Unity Editorでは透過結果を確認出来ないので注意してください。

Varjo Baseの挙動がおかしいときはVarjo Baseの「Support」->「Troubleshooting」->「Restart Varjo System」のResetボタンを押して下さい。

5.1 Analystics Windowの使い方

  • (1) Varjo Baseの左側にある「Developer tools」->「Analystics window」を開く。
  • (2) Analystics windowが別ウィンドウで開くので、左下の「V」を押下する。「Simulate」を選択すると「Simulated headset」が表示されるのでXR-1 Developer Editionを選択する。
  • (3) 「Video pass-through emulation」から実世界(カメラ映像)の模擬情報として任意画像を選択する。選択した画像は「Simulate」の右横にある「Video pass-through」を押下することで、確認することが出来きます。
    ここでは例として、pixabayでダウンロードした部屋っぽい写真を入力しました。

5.2 「3. 背景の透過」の挙動確認

  • (1) 5.1項の設定をした状態でAnalystics windowの「Simulate」を押下する。
  • (2) 3項のUnityプロジェクトを実行する。
  • (3) Analystics windowでUnityの背景が透過され5.1項(3)で設定した模擬画像が表示されていることを確認する。

5.3 「4. 物体の透過」の挙動確認

  • (1) 5.1項の設定をした状態でAnalystics windowの「Simulate」を押下する。
  • (2) 4項のUnityプロジェクトを実行する。
  • (3) Analystics windowでUnityのシーン中に配置したCubeが透過され5.1項(3)で設定した模擬画像が表示されていることを確認する。

6. 複数アプリケーションの同時実行方法

VarjoXRでは、複数のアプリケーションの同時実行をサポートしています。
例えば、既存のシステムで風景を描画するソフトがあるとします。既存システムで描画された風景の中を走る自動車の運転席のみをUnityで実装し重畳することが可能になります。

  • (1) 「Edit」->「Project Settings...」->「XR Plug-in Management」を開き、「Plug-in Providers」からVarjoを選択する。
  • (2) Session Priorityを任意の値に変更する。標準は0、例えば「前面に表示したい」なら1、「後面に隠したい」なら-1を設定する。

おしまい

読んで頂き、ありがとうございました。今回は長くなってしまいましたね。
でも、これでもうUnity環境でVarjo XRのプログラム開発が出来るようになりましたよ!わーい!

他にも時間があれば、以下の話なんかを書きたいと思っています。

  • Varjo Markerと呼ばれるマーカーの抽出方法
  • アイトラッキング
  • クロマキー合成
  • 深度情報を利用した合成
  • 複数アプリ同時実行の落とし穴

今回はUnityでしたがVarjo Native SDKでの開発手順にも触れたいと考えています。
良ければ皆さんの「こんな風に開発してますよー」って声も頂けると嬉しいです。

それでは、続きはまた次の記事で!ありがとうございました。