空間機能はデバイスによって異なり、ユーザーがアプリやシステムを操作するにつれて変化する可能性があります。アプリ自体によって変更されることもあります(たとえば、ホームスペースやフルスペースに移動するなど)。問題を回避するには、アプリで空間機能を確認して、現在の環境でサポートされている API を判断する必要があります。
Jetpack Compose for XR を使用して空間機能を確認する
Jetpack Compose for XR は、空間機能を確認するためのコンポジション ローカルを作成します。これを使用して、空間 UI、空間オーディオ、環境、パススルー、3D コンテンツが有効になっているかどうかを確認します。
LocalSpatialCapabilities.current を使用すると、次の
空間機能が現在利用可能かどうかを確認できます。
isSpatialUiEnabled: アプリが空間 UI 要素(SpatialPanelなど)を作成できるかどうかを示します。isContent3dEnabled: アプリが 3D オブジェクトを作成できるかどうかを示します。isAppEnvironmentEnabled: アプリが環境を設定できるかどうかを示します。isPassthroughControlEnabled: アプリがパススルー状態を制御できるかどうかを示します。isSpatialAudioEnabled: アプリが空間オーディオを使用できるかどうかを示します。
次の例は、空間 UI が有効になっているかどうかを確認する方法を示しています。
if (LocalSpatialCapabilities.current.isSpatialUiEnabled) { Subspace { SpatialPanel( modifier = SubspaceModifier .width(1488.dp) .fillMaxHeight() ) { AppContent() } } } else { AppContent() }
SceneCore を使用して空間機能を確認する
SceneCore ライブラリを使用する場合は、セッションを作成する必要があります。セッションが作成されたら、セッションの
sceneからspatialCapabilitiesを使用して、現在利用可能な空間機能をクエリします。
SPATIAL_3D_CONTENT: アクティビティで 3D コンテンツを作成できます。APP_ENVIRONMENT: アクティビティで独自の環境を設定できます。EMBED_ACTIVITY: アクティビティで別の空間にアクティビティを埋め込むことができます。PASSTHROUGH_CONTROL: アクティビティでパススルーを有効または無効にできます。SPATIAL_AUDIO: アクティビティで空間オーディオを使用できます。SPATIAL_UI: アクティビティを空間化できます(空間パネルを追加するなど)。
空間機能が変更されたときに通知するコールバック
addSpatialCapabilitiesChangedListenerを登録することもできます。
// Example 1: check if enabling passthrough mode is allowed if (xrSession.scene.spatialCapabilities.contains( SpatialCapability.PASSTHROUGH_CONTROL ) ) { xrSession.scene.spatialEnvironment.preferredPassthroughOpacity = 1f } // Example 2: multiple capability flags can be checked simultaneously: if (xrSession.scene.spatialCapabilities.contains(SpatialCapability.PASSTHROUGH_CONTROL) && xrSession.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT) ) { // ... }
ブレンドモードを使用してデバイスの表示機能を確認する
Android XR では、XR ヘッドセットと有線 XR グラスのハードウェア機能が異なります。特にディスプレイのタイプが異なります。表示タイプとデバイスで使用される推奨ブレンドモードによって視認性が影響を受ける可能性があるため、視認性を最大限に高めるには、アプリの UI とレンダリングされたオブジェクトの色を調整する必要がある場合があります。DisplayBlendMode API は、レンダリング用のデバイスのブレンドモード
機能を提供します。この API を使用して、仮想コンテンツを実世界に追加する方法を決定します。
注意すべきブレンドモードのタイプをいくつかご紹介します。
ADDITIVE: 赤、緑、青の各コンポーネントのピクセル値を追加することで、仮想コンテンツが実世界に追加されます。アルファは無視され、黒いピクセルは透明になります。ALPHA_BLEND: アルファ コンポーネントに基づいてピクセル値をアルファ ブレンドすることで、仮想コンテンツが実世界に追加されます。NO_DISPLAY: デバイスでブレンドはサポートされていません。
XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() を
Jetpack XR Runtime ライブラリから使用して、使用されているブレンドモードのタイプを確認し、
必要に応じて調整します。