ヒントと制約事項
空間再現ディスプレイ(Spatial Reality Display)は、他のシステムと比較して視線認識システム、SR Renderingシステムなどいくつかの特徴的な点があります。 またPC単体のアプリケーションというより、どちらかというとVRアプリケーションに近いシステムになっています。そのため、いくつかのVR固有のヒントや制約があります。
全Plugin共通
優れたユーザー体験のためにレイテンシを最小化する
待ち時間が短いことは、良いユーザー体験のために非常に重要です。
レイテンシを最小化するためにVSyncを使用しないことを強くおすすめします。 Project Settings > Quality > VSync Count内のDon't Syncを選択することでVSyncをオフすることが可能です。 しかし、Vsyncを切るとthe tearing problemが発生するため、最終的な使用については開発者ご自身でご検討ください。
また、レイテンシを短縮するためにはコンテンツの最適化についても注意が必要です。 VSyncをオフにしていても、アプリケーションのパフォーマンス負荷が高ければレイテンシは長くなります。
これはVRコンテンツ開発時のパフォーマンス最適化と非常に似ています。
Screen Spaceを使用したコンテンツを使用しないでください。
Spatial Reality DisplayのScreen Spaceを使用したコンテンツは、ユーザーに不快感を与えたり、健康に悪影響を及ぼす可能性があります。
例えば、Unity UIでは、World Space Render Modeのみがサポートされており、Screen Spaceのモードはサポートされていません。 Screen Space ModeのキャンバスでUI要素を配置すると、アプリケーションを再生したときにUI要素が表示されなくなります。 (詳細はこちらを参照ください: Canvas | Unity UI)
また、Video Playerでは、Camera Far/Near Plane Render Modesはサポートされていません。SRディスプレイでVideo再生したい場合は以下の手順を試してください。
Spatial Reality Display View Spaceにplaneを配置する。
planeにVideo Playerをアタッチします。
Video PlayerのレンダリングモードをMaterial Override Render modeに設定します。
任意のVideo ClipをVideo Playerに設定します。
アプリを起動すると、planeに動画が再生されます。
Spatial Reality Displayとの接続が切れるとUnityアプリの動作が停止します。
Spatial Reality Display Plugin for UnityをプラグインしたUnityアプリは、Spatial Reality Displayとの接続が切れるとエラーメッセージが表示され、動作が停止します。
BRP/URP Plugin共通
Spatial Clippingは一部のシェーダ(マテリアルとパーティクル)に副作用をおよぼします
Spatial Clippingは、射影行列を変更するため、クリップ空間座標における奥行きが変更されます。このため、クリップ空間座標でZ値を使用しているシェーダは期待通りに動作しないことがあります。
そのため、そのようなシェーダを使用したマテリアルやパーティクルは、Spatial Clippingが有効な場合、期待通りに動作しないことがあります。
URPのCamera Stacking機能はサポートされません
Spatial Reality Display Plugin for Unityではoverlayされたcameraを制御できないため、Camera Stacking機能はサポートされません。
Reflection Probeの一部の設定がOpenGLでうまく動作しない
Spatial Reality Display Plugin for Unityで以下のような問題が発生します: Project SettingsでGraphics APIをOpenGL Coreに設定し、Build SettingsでDevelopment Buildを無効にしている場合、 Reflection Probe(TypeがRealtime、Refresh ModeがEvery frame、Time SlicingがNo time slicing)があると、アプリケーションは黒画面しか表示できません。
SRDispalyManager Prefab にMain Cameraがアタッチされていない
必要に応じて、LeftEyeCameraのカメラコンポーネントにMainCameraタグを追加してください。
WatcherCameraのカメラコンポーネントにMainCameraタグを追加してはいけません。 WatcherCameraが処理負荷を軽減するために実行時に自動的に無効化され、Camera.mainでコンポーネントを取得することができないためです。