地域を選んでください

Australia
Österreich
België
Canada
Canada - Français
中国
Česká republika
Denmark
Deutschland
France
HongKong
Iceland
Italia
日本
Korea
Latvija
Lietuva
Lëtzebuerg
Malta
المملكة العربية السعودية (Arabic)
Nederland
New Zealand
Norge
Polska
Portugal
Russia
Saudi Arabia
Southeast Asia
España
Suisse
Suomi
Sverige
台灣
Ukraine
United Kingdom
United States

同じシーンで 6DoF と 3DoF の間で切り替えるにはどうすればよいですか?

6DoF デバイスを持っており、6DoF モードで実行している場合は、コンテンツを 6DoF と 3DoF の間で切り替えることができると想定できます。 コンテンツで 3DoF と 6DoF を切り替える必要がある場合は、この点に留意してください。

ヘッドセットとコントローラー

3DoF の場合、固定変換のためにコントローラーは通常目の前にあります。固定変換は、コントローラーとコントローラーを使用するユーザーの間の距離を維持します。この距離は、コントローラーを動かしても変化しない場合があります。しかしながら 6DoF の場合は、固定変換を外す必要があります。外さなかった場合、コントローラーとコントローラーを使用するユーザーの間に常に隔たりが発生することになります。
6DoF では、コントローラーは通常、ヘッドセットと同じ場所に配置されます。この場所が位置センサーの原点となります
Vector3(0, 0, 0)
. 3DoF に切り替えると、ヘッドセットとコントローラーが常に原点に固定されます。

VR の使用中に、ヘッドセットやコントローラーの GameObject を操作していない場合、コントローラーのモデルが頭から出現し、頭が床にあるのを見ることになるでしょう。このため、コントローラーと床の間の距離を保つためにも、固定変換はやはり必要になります。

ポーズトラッカー

WaveVR_PoseTracker で、3DoF モードのときに trackPositionfalse に設定します。このフラグは、GameObject の変換位置は更新しません。更新する場合は、スクリプトで実行します。
controllerGameObject.GetComponent<WaveVR_PoseTracker>().trackPosition = false;

trackPositiontrue に設定して 6DoF モードに切り替えます。

レンダリング

レンダリングは、ポーズを取得する際に、オリジンタイプをシステム全フレームに設定します。オリジンタイプは、ポーズの座標 (0,0,0) の表示方法を決定します。
チップ: オリジンタイプはランタイムに変更できます。

3DoF の場合じゃ、WaveVR の render.originWVR_PoseOriginModel.WVR_PoseOriginModel_OriginOnHead_3DoF に設定します。詳細は、SDK API の説明をご覧ください。

var render = WaveVR_Render.Instance; render.origin = WVR_PoseOriginModel.WVR_PoseOriginModel_OriginOnHead_3DoF;

目から頭への変換

目から頭への変換は、目の空間座標を頭の空間座標に変更します。

例えば左目が、目の前にあるリンゴを位置 (0, 0, 1) として見ている場合、この世界の実際のリンゴの位置は次のようになります:

HeadPose * EyeToHeadTransform * (0,0,1)

EyeToHeadTransform が次のとおりであり:

| 1 0 0 -0.03 | | 0 1 0     0 | | 0 0 1     0 | | 0 0 0     1 |

ヘッドセットの変換が次のとおりである場合:

| 1 0 0   0 | | 0 1 0 1.8 | | 0 0 1   0 | | 0 0 0   1 |
目の変換 (-0.03, 0, 0) を、頭の空間から取得できます。リンゴは:
  • 頭の空間では (-0.03, 0, 1)
  • 世界空間では (-0.03, 1.8, 1)

リンゴの位置は、逆変換することで、世界空間と目の空間からも知ることができます。

EyeToHeadTransform^-1 * HeadPose^-1 * (-0.03, 1.8, 1)

6DoF と 3DoF で EyeToHeadTransform の値が異なる可能性があります。

6DoF の左目 | 1 0 0 -0.03 | | 0 1 0  0.05 | | 0 0 1  0.05 | | 0 0 0     1 |

3DoF の左目 | 1 0 0 -0.03 | | 0 1 0     0 | | 0 0 1 -0.15 | | 0 0 0     1 |

6DoF の変換値はヘッドセットに基づいて変わります。3DoF の場合、変換値は頭の回転中心に基づいており、ユーザー体験を向上させるため、z は通常 -0.15 になります。

送信
ありがとうございます。