Unity
翻訳
Oculus

Oculus Utilities for Unity [翻訳] [Oculus公式]

はじめに

UnityとOculusの勉強のためにドキュメントを翻訳しました。
今回翻訳したドキュメントはUnity用Utilities packageのOculus Utilities for Unityについてです。

Oculus Utilitiesにはコントローラー表示の出来るPrefabsであるOVRCameraRigも含まれており、非常に便利ですので理解して損はないと思います。
というか自分が理解出来ていないな、と感じたのが今回の翻訳のきっかけです。
頑張って翻訳しましたがGoogle翻訳の精度が高すぎて、そちらを参考にすることも多々あり、だいぶ心が折れそうになりました。

翻訳してみて、英語の勉強にもなって非常にためになりました。
まだまだわかりにくい訳があるので、今後も随時更新していきます。

原文はこちらです。
https://developer.oculus.com/documentation/unity/latest/concepts/unity-utilities-overview/#unity-utilities-overview

Oculus Utilities for Unity

このセクションでは、ユーティリティパッケージのディレクトリ構造、付属のPrefabs、いくつかのC#スクリプトを含む概要について説明します。

ユーティリティパッケージはUnity Downloadsページから入手できます。
またUnity Asset StoreからOculus Integrationとして利用することもできます。

OVRPlugin

OVRPluginは、UnityエディタにOculus RiftとMobileのサポートを提供します。

Unityバージョン5.1以降には、Rift、Oculus Go、Samsung Gear VRのビルトインサポートを提供するOculus OVRPluginのバンドル版が付属しています。

Utilitiesのバージョン1.14以降には、OVRPluginの最新バージョンが含まれています。 Unity用ユーティリティをUnityプロジェクトにインポートするとき、ユーティリティパッケージに含まれているOVRPluginのバージョンが、エディタに組み込まれているバージョンより後である場合は、ポップアップダイアログで自動的にアップデートするオプションが表示されます。
エディタではなく、プロジェクトが更新されていることに注意してください。同じエディタで異なるバージョンのOVRPluginを使用する異なるプロジェクトで作業する場合があります。ただし、常に最新のOVRPluginバージョンを使用することをお勧めします。

インポート処理中にOVRPluginの更新を拒否した場合、後でTools> Oculus> Update OVR Utilities Pluginを選択して更新することができます。

ユーティリティパッケージを使用してOVRPluginを更新した後、何らかの理由でエディタに含まれているバージョンにロールバックしたい場合は、[ツール]> [Oculus]> [Disable OVR Utilities Plugin]を選択して簡単に行うことができます。

現在、アップデート機能はOS X / macOSではサポートされていません。

Note: 最新のOVRPluginバージョン番号は、ユーティリティバージョン番号の後ろのバージョンまたは2つ前のバージョンである場合があります。

Utilities for Unity Contents

このガイドでは、ユーティリティパッケージの内容の概要を説明します。

OVR

OculusUtilities.unitypackage内のOVRフォルダの内容は一意の名前で指定されており、既存のプロジェクトにインポートする際には安全でなければなりません。
OVRディレクトリには、次のサブディレクトリがあります。

  • Editor

    • Unity Editorに機能を追加し、いくつかのC#コンポーネントスクリプトを拡張するスクリプト
  • Materials

    • メインGUIディスプレイなど、ユーティリティパッケージ内のグラフィカルコンポーネントに使用されるマテリアル。  
  • Meshes

    • TrackerBoundsなど、一部のOVRスクリプトで必要なメッシュ。    
  • Prefabs

    • VRサポートを提供するために使用されたUnity prefabs
    • OVRCameraRigとOVRPlayerController。
  • Scenes

    • サンプルシーン。 
  • Scripts

    • VRフレームワークとUnityコンポーネントを結合するために使用されるC#ファイル。これらのスクリプトの多くは、さまざまなPrefabs内で連携して動作します。  
  • Textures

    • 一部のスクリプトコンポーネントで必要なイメージアセット。  

Note:付属のOVRスクリプトを直接変更しないことを強くお勧めします。

Plugins

PluginsフォルダにはOVRGamepad.dllが含まれており、このスクリプトとWindows上のXboxゲームパッド(32ビット版と64ビット版の両方)と通信ができます。
このフォルダには、Mac OS用のプラグイン「OVRGamepad.bundle」も含まれています。

Prefabs

このセクションでは、OVRManagerおよびOVRPlayerControllerへのインタフェースを提供するOVRCameraRigを含むUtilitiesパッケージによって提供されるPrefabsの概要を示します。

Utilities for UnityはAssets -> OVR -> Prefabsでプレハブを提供します。

  • OVRCameraRig
  • OVRPlayerController
  • OVRCubemapCaptureProbe

使用するには、Prefabsの1つをシーンにドラッグ&ドロップするだけです。

OVRCameraRig

OVRCameraRigは、シーン内の通常のUnity Cameraを置き換えるために使用できるカスタムVRカメラです。 OVRCameraRigをシーンにドラッグすると、シーンの表示を開始できます。

OVRCameraRigを使用する主な利点は、VRハードウェアへのメインインターフェイスを提供するOVRManagerへのアクセスを提供することです。このようなアクセスが必要ない場合は、標準のUnityカメラを簡単に設定して、基本的なVRサポートを追加することができます。詳細については、Unity VRのサポートを参照してください。

Note: シーン内の他のカメラをオフにして、OVRCameraRigが使用されている唯一のカメラであることを確認してください。

,,.png
OVRCameraRig and OVRManager

OVRCameraRigには1つのUnityカメラが含まれ、そのポーズはヘッドトラッキングによって制御されます。左右の目のための2つの「アンカー」ゲームオブジェクト。頭部追跡基準フレームと現実世界との間の関係を微調整することを可能にする1つの「追跡空間」ゲームオブジェクト。リグは、歩くキャラクター、車、砲塔などの動く物体に取り付けられることを意図しています。これは従来のカメラに代わるものです。

次のスクリプト(コンポーネント)がOVRCameraRigに添付されています。

  • OVRCameraRig.cs
  • OVRManager.cs

詳細はUnityコンポーネントのOVRCameraRigコンポーネントとOVRManagerコンポーネントを確認してください。

OVRPlayerController

OVRPlayerControllerは、仮想環境のナビゲートを開始する最も簡単な方法です。これは、基本的に単純なキャラクタコントローラに接続されたOVRCameraRigプレハブです。これは、物理カプセル、移動システム、テキストフィールドのステレオレンダリングを備えたシンプルなメニューシステム、およびクロスヘアコンポーネントを含みます。

使用するには、プレイヤーコントローラーを環境にドラッグし、ゲームパッドまたはキーボードとマウスを使用して移動を開始します。

Note: collision detectionがアクティブであることを確認してください。

1つのスクリプト(コンポーネント)がOVRPlayerControllerに添付されています。

  • OVRPlayerController.cs

18309186_1107404509366018_648840254140186624_n.png
OVRPlayerController

OVRCubemapCaptureProbe

このPrefabsを使用すると、起動後の指定された時刻、指定したキーが押されたとき、またはスタティック関数OVRCubemapCapture.TriggerCubemapCaptureが呼び出されたときに、実行中のアプリケーションの静的360スクリーンショットをキャプチャできます。この関数の詳細については、Unity Developer Referenceを参照してください。

OVRCubemapCaptureProbeは、OVR Screenshotに基づいています(詳細については、Cubemapのスクリーンショットを参照してください)。

スクリーンショットはシーンカメラの視点から撮影されます。指定されたディレクトリに書き込まれ、JPEGまたはPNGのいずれかです。ファイルタイプは、[パス名]フィールドに入力したファイル拡張子で指定します。デフォルトはPNGです。解像度は設定可能です。

Basic Use

OVRCubemapCaptureProbeをシーンにドラッグし、Inspectorビューで必要に応じてパラメータを設定します。

18309141_1107404389366030_6989983674225655808_n.png

Parameters

  • Auto Trigger After Launch

    • Auto Trigger Delayで指定された遅延後にキャプチャを有効にする場合に選択します。それ以外の場合、キャプチャはキーでトリガされたキー入力によってトリガされます。
  • Auto Trigger Delay

    • キューブマップを取得する前に、アプリケーションの起動後に遅延を指定します。 (起動後の自動トリガが選択されている必要があります)。
  • Triggered By Key

    • イメージキャプチャをトリガするキーを指定します(起動後の自動トリガが選択されていないことが必要です)。
  • Path Name

    • 画面キャプチャのディレクトリ、ファイル名、およびファイルの種類(JPEGまたはPNG)を指定します。
    • Windowsのデフォルトパス:C:\ Users \ $ username \ AppData \ LocalLow \ Sample \ $ yourAppName \ OVR_ScreenShot306
    • Androidのデフォルトパス:/storage/emulated/0/Android/data/com.unity3d.$yourAppName/files/OVR_ScreenShot360
    • デフォルトのファイルタイプはPNGです。
  • Cubemap Size

    • サイズを指定してください(デフォルトは2048 x 2048で、Oculus Storeにプレビューされたキューブマップのプレビューに必要な解像度です)。

Unity Components

このセクションでは、ユーティリティパッケージによって提供されるコンポーネントの概要を示します。

OVRCameraRig

OVRCameraRigは、ステレオレンダリングとヘッドトラッキングを制御するComponentです。
left eyesとright eyesのポーズに3つの子anchorトランスフォームと、それらの中間にある仮想のcenter eyeを維持します。

このコンポーネントは、Unityとカメラの間の主要なインターフェースです。これは、シーンに快適なVRサポートを追加しやすくするためのプレハブに付属しています。

重要:
すべてのカメラコントロールは、このコンポーネントを通して行う必要があります。独自のカメラ制御メカニズムを実装するときは、このスクリプトを理解する必要があります。

Mobile and Rift Public Members

  • Updated Anchors
    • トラッキングによって設定されたポーズをクライアントがフィルタリングできるようにします。位置追跡を変更または無視するために使用されます。

Game Object Structure

  • TrackingSpace
    • 追跡によって使用される参照フレームを定義するゲームオブジェクト。リグがトラッカー入力に応答する必要があるユースケースについては、これをOVRCameraRigに対して相対的に移動できます。たとえば、OVRPlayerControllerは、キャラクタコントローラを現在の頭部ポーズのヨーに追従させるようにTrackingSpaceの位置と回転を変更します。

OVRManager

OVRManagerは、VRハードウェアへのメインインタフェースです。これは、Oculus SDKをUnityに公開するシングルトンであり、格納されたOculus変数を使用してカメラの動作を設定するヘルパ関数を含みます。

このコンポーネントはOVRCameraRigプレハブに追加されます。どのアプリケーションオブジェクトの一部でもかまいません。ただし、Unity Inspectorで特定の値を変更できるパブリックメンバーが含まれているため、一度だけ宣言する必要があります。

OVRManager.csには、次のパブリック・メンバーが含まれています。
- Queue Ahead (Deprecated)
- 有効にすると、パイプラインのストールを避け、CPU-GPUの並列性を高めるために、歪みレンダリングの作業が4分の1フレーム早期に実行されます。

  • Use Recommended MSAA Level

    • 有効にすると、Unityは現在のハードウェアの品質/性能に最適なアンチエイリアスレベルを使用します。
  • Enable Adaptive Resolution (Rift only)

    • GPUの使用率が85%を超えるとアプリケーションの解像度を縮小し、85%を下回るとスケールアップします(0.5〜2.0,1 =通常の濃度)。 Unity 5.4以降が必要です。 知覚されるアーティファクトの解像度の変化を最小限に抑えるために、解像度の変更ごとに最小2秒の遅延があります。
  • Min Render Scale (Rift only)

    • 適応解像度の最小範囲を設定します(デフォルト= 0.7)
  • Max Render Scale (Rift only)

    • 適応解像度の最大範囲を設定します(デフォルト= 1.0)。
  • Enable Mixed Reality (Rift only)

    • 複合現実感のキャプチャを可能にします。詳細については、Unity Mixed Reality Captureを参照してください。
  • Use Direct Composition (Rift only)

    • 直接合成モードで複合現実感のキャプチャビューを開きます。外部合成モードに設定する場合は選択解除します。
  • Green Screen Color Tolerance A (Rift only)

    • 複合現実感をキャプチャするためにピクセル内の非グリーン値をどれだけ重く測るかを設定します。 (直接合成のみ)
  • Green Screen Color Tolerance B (Rift only)

    • 複合現実感をキャプチャするためにピクセル内の緑の値をどれだけ重くするかを設定します。 (直接合成のみ)
  • Green Screen Color Alpha Cutoff (Rift only)

    • アルファカットオフは、クロマキー評価の後でブリードテストの前に評価され、アルファ値の低いピクセルを取り出して完全に破棄します。 (複合現実感のキャプチャ、直接合成のみ。)
  • Green Screen Color Shadows (Rift only)

    • シャドウしきい値は、シャドウキャストの問題を緩和するために暗いピクセルを減らします。 (複合現実感のキャプチャ、直接合成のみ。)
  • Tracking Origin Type

    • Eye Levelに設定すると、HMDの位置に対する位置と向きのy軸を追跡できます。 Floor Levelに設定すると、Oculus Configuration Utilityで指定されたユーザーの起立した高さに基づいて、フロアに対する相対的な位置と向きが追跡されます。デフォルトはアイレベルです。
  • Use Position Tracking

    • IRトラッカーを無効にし、ヘッドモデルを使用して現在の回転からヘッド位置を推測させます。
  • Use IPD in Position Tracking

    • 有効にすると、ユーザーの目の間の距離が各OVRCameraRigのカメラの位置に影響します。
  • Reset Tracker On Load

    • 無効にすると、それ以降のシーンの読み込みでもトラッカーはリセットされません。これにより、シーンごとにトラッカーの向きが同じに保たれ、磁力計の設定がそのまま維持されます。

Floating-point format eye buffers

リフトのみ。 Unity 5.6.1p1以降とUtilities 1.15以降が必要です。

8ビットsRGBフレームバッファは、非VRアプリケーションに適しています。しかし、VRのライトロックの性質のために、VRアプリケーションでsRGBバッファを使用すると、ユーザーの目は暗い色に調整でき、色のバンディングアーチファクトを含むシーンの暗い部分の微妙な違いを検出できます。 OVRManagerを使用して浮動小数点形式のアイバッファをOculusランタイムに送信すると、8ビットのsRGBアイバッファで表示されていた暗い領域でのカラーバンディングが排除されます。 OVRManagerは2つの浮動小数点フォーマットをサポートしています。

  • R11G11B10_FP:このフォーマットは、通常の8ビットsRGBフレームバッファと同じ帯域幅コストを持つため、通常のレンダリングには余分なパフォーマンスコストは必要ありません。この形式は、ほとんどのアプリケーションで色のバンディングを除去するのに十分なはずです。ただし、名前が示すように、この形式のアルファチャンネルはありません。そのため、アプリケーションで宛先アルファブレンディングが必要な場合や、フレームバッファアルファチャンネルをサンプリングする必要がある場合は、R16G16B16A16_FP

  • R16G16B16A16_FP:このフォーマットには、フレームバッファアルファチャンネルが必要な場合でも、アプリケーションと互換性のある16ビット浮動小数点精度の完全アルファチャンネルがあります。帯域幅コストは8ビットsRGBフォーマットの2倍です。

この機能を有効にするには、OVRManager.eyeTextureFormat = R11G11B10_FPまたはOVRManager.eyeTextureFormat = R16G16B16A16_FPをUnity初期化スクリプトに追加します。

新しい目のテクスチャフォーマットはリニアカラースペースでのみ機能します。フレームバッファにアルファチャンネルが必要な場合は、OVRManager.eyeTextureFormat = R16G16B16A16_FPを使用する必要があります。

Helper Classes

上記のコンポーネントに加えて、スクリプトは常にOVRManagerの静的メンバーを介してHMD状態にアクセスできます。詳細については、Unityスクリプティングリファレンスを参照してください。

  • OVRDisplay

    • HMDの姿勢とレンダリング状態を提供します。
  • OVRTracker

    • 赤外線追跡センサーの姿勢、錐台、追跡状況を提供します。

Rift Recentering

OVRManager.display.RecenterPoseは、ヘッドポーズとトラッキングされたコントローラのポーズ(存在する場合)を追加します(トラッキングコントローラの詳細については、OVRInputを参照してください)。

Tracking Origin TypeがFloor Levelに設定されている場合、OVRManager.display.RecenterPose()はx軸、y軸、z軸の位置を原点にリセットします。 Eye Levelに設定されている場合、x軸、y軸、z軸はすべて原点にリセットされ、y値はOculus設定ユーティリティで実行された高さ校正に対応します。どちらの場合も、yの回転は0にリセットされますが、xとzの回転は不変であり、一貫した地平面を維持します。

RecenterリクエストはOculus C APIに渡されます。その後の処理の詳細については、「PC SDK開発者ガイド」のVR Focus Managementを参照してください。

Utilities

OVRPlayerController

OVRPlayerControllerはVRフレームワークのための基本的な一人称コントローラを実装します。
これは、OVRPlayerControllerプレハブに添付されます。プレハブには、OVRCameraRigが添付されています。
シーンに衝突検出が割り当てられている場合、コントローラーはUnityシーンと適切に動作します。
OVRPlayerControllerには、コントローラの物理特性を変更するスライダに接続されたいくつかの変数が含まれています。
これには、加速度(どのくらい速くプレイヤーがスピードを上げるか)、ダンプニング(動き入力が作動しないときにプレーヤーがスピードをどれくらい速く下げるか)、バックとサイドダンパー(サイドとバックアクセラレーションをどれだけ減らすか)、回転量Y軸でユーザーを回転させるフレームごとの度数)と重力モディファイア(空中でプレーヤーを加速させる速度) HMD Rotates Yが設定されると、カメラの実際のY回転は、それが取り付けられている親変換のY回転値を設定します。
OVRPlayerControllerプレハブには、ForwardDirectionという名前の空のGame Objectが添付されています。
このゲームオブジェクトには、モーターコントロールがその方向を支配するマトリックスが含まれています。
このゲームオブジェクトには、プレーヤーが見ることができるボディジオメトリも格納する必要があります。

OVRGridCube

OVRGridCubeは、起動時にキューブのグリッドを表示するヘルパークラスです。その主な目的は、理想的な位置の中心がユーザの目の位置のどこであるかを知る方法として使用されることです。これは、位置追跡が有効になっている場合に特に便利です。位置データが利用可能な場合はキューブの色が赤に変わり、位置追跡が利用できない場合は青色のままになります。視覚が失われた場合は青色に戻ります。

Game Object Structure

  • ForwardDirection
    • モータ制御がその方向を支配するマトリックスを含むOVRPlayerControllerプレハブに接続された空のゲームオブジェクト。このゲームオブジェクトには、プレーヤーが見ることができるボディジオメトリも格納する必要があります。 詳細は、「OVRCameraRig」の「TrackingSpace」を参照してください。

OVRInputの詳細については、OVRInputを参照してください。

Oculus Scripts and Scenes

ユーティリティパッケージには、開発を支援するためのスクリプトと、いくつかのサンプルシーンが含まれています。

Assets -> OVR -> Scenesには、少しの初歩的なサンプルシーンが用意されています。これらは、基本コンポーネントの簡単な実装を示し、VR機能が適切に動作していることを確認するのに役立ちます。独自のアプリケーションで再利用できるスクリプトやアセットを含むさらに詳しいサンプルについては、Unity Sample Frameworkを参照してください。

  • Trivial

    • 1つの立方体と普通のユニティカメラを持つ空のシーン。このシーンが正常にレンダリングされない場合、UnityのVRサポートは機能しません。
  • Cubes

    • ユーティリティパッケージからのキューブの3D配列とOVRCameraRig。
  • Room

    • OVRPlayerControllerを囲む6つの立方体から形成された立方体の部屋。スクリプトOVRGrabberとOVRGrabbableが含まれているため、ユーザーはTouchコントローラでキューブをピックアップできます。

モバイル開発を支援するためのスクリプトは、Assets -> OVR -> Scriptsにあります。開発者が使用することを意図していないフォルダに含まれるスクリプトは、このリストから除外されています。

  • OVRBoundary

  • OVRGrabber

    • Oculus Touchを使用してOVRGrabbableコンポーネントでオブジェクトをつかんで投げることができます。 OVRGrabbableを使用する必要があります。
  • OVRGrabbable

    • Oculus Touchでオブジェクトをつかみ投げられるようにオブジェクトに貼り付けます。 OVRGrabberを使用する必要があります。
  • OVRHaptics

    • Touchコントローラへの触覚フィードバックをプログラムで制御します。詳細は、OVRHaptics for Oculus Touchを参照してください。
  • OVRHapticsClip

    • Touchコントローラへの触覚フィードバックをプログラムで制御します。詳細は、OVRHaptics for Oculus Touchを参照してください。
  • OVRInput

    • 複数のコントローラタイプに統一された入力APIを公開します。詳細については、OVRInputを参照してください。
  • OVROverlay.cs

    • アイ・バッファに描画することによって、代わりにVRコンポジタ・レイヤーとしてレンダリングするゲーム・オブジェクトに追加します。詳細は、VRコンポジットレイヤーを参照してください。
  • OVRPlatformMenu.cs

    • Backキーを長押ししてユニバーサルメニューを表示し、Backキーを短く押すと、ホームメニューにConfirm-Quitが表示されます。さらに、長押し時間を表示するための待機タイマーを実装しています
    • インターフェイスのガイドラインと要件の詳細については、モバイルSDKのドキュメントのインターフェイスガイドラインとユニバーサルメニューを参照してください。
  • OVRTouchpad.cs

    • タッチパッドへのインタフェースクラス。

モバイル開発を支援するためのシンプルなスクリプトは、Assets -> OVR -> Scripts -> Utilにあります。開発者が使用することを意図していないフォルダに含まれるスクリプトは、このリストから除外されています。

  • OVRChromaticAberration.cs

    • Android用の色収差補正をオン/オフするためのドロップインコンポーネント。
  • OVRDebugGraph.cs

    • TimeWarpデバッググラフのオンとオフを切り替えるドロップインコンポーネント。 TimeWarpデバッググラフに関する情報は、モバイルSDKのドキュメントのTimeWarpテクニカルノートに記載されています。
  • OVRModeParms.cs

    • 現在の電力レベル状態を照会する方法と同様に、電力および熱負荷を削減するためにアプリケーションのクロックを解除するためのコード例。
  • OVRMonoscopic.cs

    • Android用のMonoscopicレンダリングのオン/オフを切り替えるためのドロップインコンポーネント。
  • OVRResetOrientation.cs

    • カメラの方向をリセットするためのドロップインコンポーネント。
  • OVRWaitCursor.cs

    • 待機カーソルを自動回転させるためのヘルパーコンポーネント。

これらおよびその他のC#スクリプトの詳細については、Oculus Utilities for Unityリファレンスマニュアルを参照してください。文書化されていないスクリプトは、内部的なものとみなされ、一般的に変更されるべきではありません。

まとめ

ここまでまとめてみましたが、Oculus Utilitiesに何が含まれているかはだいぶ理解できた気がします。
間違いや修正点等ありましたらご指摘いただけると嬉しいです。