XR_ANDROID_light_estimation
名前文字列
XR_ANDROID_light_estimation
拡張機能のタイプ
インスタンス拡張機能
登録済み拡張機能番号
701
リビジョン
1
批准ステータス
批准されていません
拡張機能とバージョンの依存関係
最終更新日
2025-03-13
IP ステータス
既知の IP クレームはありません。
寄与者
Jared Finder(Google)
Cairn Overturf(Google)
Spencer Quin(Google)
Levana Chen(Google)
Nihav Jain(Google)
Salar Khan(Google)
Scott Chung(Google)
概要
この拡張機能を使用すると、アプリケーションはヘッドセット周辺の実世界の環境の照明を表すデータをリクエストできます。アプリケーションは、この情報を使用して、配置されている実世界のシーンと同じ条件で仮想オブジェクトを照らすことができます 。
権限
この拡張機能は環境の照明情報を公開するため、Android アプリケーションはマニフェストに android.permission.SCENE_UNDERSTANDING_COARSE 権限を記載する必要があります 。android.permission.SCENE_UNDERSTANDING_COARSE 権限は危険な権限と見なされます。アプリケーションは、これらの関数を使用するために、実行時に権限をリクエストする必要があります 。
(保護レベル: 危険)
システムの機能を確認する
XrSystemLightEstimationPropertiesANDROID 構造体は次のように定義されます。
typedef struct XrSystemLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
メンバーの説明
typeは、この構造体の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。supportsLightEstimationはXrBool32で、現在のシステムが照明推定をサポートしているかどうかを示します。
アプリケーションは、xrGetSystemProperties を呼び出すときに XrSystemProperties を XrSystemLightEstimationPropertiesANDROID 構造体で拡張することで、システムが照明推定をサポートできるかどうかを確認できます 。
ランタイムが XR_FALSE に対して supportsLightEstimation を返す場合、ランタイムは xrCreateLightEstimatorANDROID から XR_ERROR_FEATURE_UNSUPPORTED を返す**必要があります** 。
有効な使用方法(暗黙的)
- XrSystemLightEstimationPropertiesANDROID を使用する前に、
XR_ANDROID_light_estimation拡張機能を有効にする必要があります -
typeはXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID**にする必要があります** 。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタにする必要があります
照明推定ハンドルの作成
XR_DEFINE_HANDLE(XrLightEstimatorANDROID)
照明推定データはランタイムによって生成され、XrLightEstimatorANDROID ハンドルを使用してアプリケーションと共有されます。
このハンドルを使用して、この拡張機能の他の関数を使用して照明推定情報にアクセスできます 。
xrCreateLightEstimatorANDROID 関数は次のように定義されます。
XrResult xrCreateLightEstimatorANDROID(
XrSession session,
XrLightEstimatorCreateInfoANDROID* createInfo,
XrLightEstimatorANDROID* outHandle);
パラメータの説明
sessionは、XrSession が照明推定を作成します。createInfoは、照明推定の作成に使用するパラメータを含む XrLightEstimatorCreateInfoANDROID 構造体へのポインタです。outHandleは、作成された XrLightEstimatorANDROID が返されるハンドルへのポインタです。
アプリケーションは、xrCreateLightEstimatorANDROID 関数を使用して照明推定を作成します。
- システムが照明推定をサポートしていない場合、ランタイムは
XR_ERROR_FEATURE_UNSUPPORTEDを返す必要があります 。 - 呼び出し元のアプリに必要な権限が付与されていない場合、ランタイムは
XR_ERROR_PERMISSION_INSUFFICIENTを返す必要があります 。
アプリケーションが照明推定データへのアクセスを終了したことをランタイムに示す場合は、xrDestroyLightEstimatorANDROID を使用してハンドルを破棄する必要があります 。
有効な使用方法(暗黙的)
-
XR_ANDROID_light_estimation拡張機能を xrCreateLightEstimatorANDROID を呼び出す前に有効にする必要があります -
sessionXrSession は有効な ハンドル**にする必要があります** 。 -
createInfoは XrLightEstimatorCreateInfoANDROID 構造体へのポインタ**にする必要があります** -
outHandleは XrLightEstimatorANDROID ハンドルへのポインタ**にする必要があります** 。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOST
XrLightEstimatorCreateInfoANDROID 構造体は、XrLightEstimatorANDROID ハンドルを作成するための情報を記述します。
typedef struct XrLightEstimatorCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrLightEstimatorCreateInfoANDROID;
メンバーの説明
typeは、この構造体の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。
有効な使用方法(暗黙的)
-
XR_ANDROID_light_estimation拡張機能を XrLightEstimatorCreateInfoANDROID を使用する前に有効にする必要があります。 -
typeはXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROIDにする必要があります -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタにする必要があります 。関連情報: XrCubemapLightEstimatorCreateInfoANDROID、XrPointLightsEstimatorCreateInfoANDROIDX1
xrDestroyLightEstimatorANDROID 関数は次のように定義されます。
XrResult xrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator);
パラメータの説明
estimatorは、XrLightEstimatorANDROID で以前に作成された xrCreateLightEstimatorANDROID です。
xrDestroyLightEstimatorANDROID 関数は、estimator と基盤となるリソースを解放します。
有効な使用方法(暗黙的)
- xrDestroyLightEstimatorANDROID を呼び出す前に、
XR_ANDROID_light_estimation拡張機能を有効にする必要があります -
estimatorは有効な XrLightEstimatorANDROID ハンドルにする必要があります
スレッドセーフ
estimatorと子ハンドルへのアクセスは、外部で同期する必要があります 。
戻りコード
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
照明推定データにアクセスする
xrGetLightEstimateANDROID 関数は次のように定義されます。
XrResult xrGetLightEstimateANDROID(
XrLightEstimatorANDROID estimator,
const XrLightEstimateGetInfoANDROID* input,
XrLightEstimateANDROID* output);
パラメータの説明
estimatorは、XrLightEstimatorANDROID で以前に作成された xrCreateLightEstimatorANDROID へのハンドルです。inputは、XrLightEstimateGetInfoANDROID 構造体へのポインタです。outputは、XrLightEstimateANDROID 構造体へのポインタです。
有効な使用方法(暗黙的)
-
XR_ANDROID_light_estimation拡張機能を xrGetLightEstimateANDROID を呼び出す前に有効にする必要があります。 -
estimatorは有効な XrLightEstimatorANDROID ハンドルにする必要があります -
inputは、有効な XrLightEstimateGetInfoANDROID 構造体へのポインタにする必要があります -
outputは、 XrLightEstimateANDROID 構造体へのポインタにする必要があります
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrLightEstimateGetInfoANDROID 構造体は次のように定義されます。
typedef struct XrLightEstimateGetInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
} XrLightEstimateGetInfoANDROID;
メンバーの説明
typeは、この構造体の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。spaceは、返される光の方向と球面調和関数が表現される参照空間を定義する XrSpace です。timeは、アプリケーションが照明推定をクエリする時刻を表すXrTimeです。
有効な使用方法(暗黙的)
-
XR_ANDROID_light_estimation拡張機能を XrLightEstimateGetInfoANDROID を使用する前に有効にする必要があります -
typeはXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROIDにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタにする必要があります -
spaceは有効な XrSpace ハンドル**にする必要があります** 。
XrLightEstimateANDROID 構造体には照明推定データが含まれます。
typedef struct XrLightEstimateANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrTime lastUpdatedTime;
} XrLightEstimateANDROID;
メンバーの説明
typeは、この構造体の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。有効な構造体には、XrAmbientLightANDROID、XrSphericalHarmonicsANDROID、XrDirectionalLightANDROID があります。stateは、照明推定の状態を表す XrLightEstimateStateANDROID です。lastUpdatedTimeは、推定が最後に計算された時刻を表すXrTimeです。
すべての照明推定構造体で state が XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID の場合、構造体内の他のフィールドは任意の値になります。つまり、値は未定義です。
周囲光、球面調和関数、主方向光の照明推定情報を取得するために、アプリケーションは、XrAmbientLightANDROID、XrSphericalHarmonicsANDROID、XrDirectionalLightANDROID の各構造体のインスタンスを XrLightEstimateANDROID :: `next` にチェーンできます 。next
有効な使用方法(暗黙的)
- XrLightEstimateANDROID を使用する前に、
XR_ANDROID_light_estimation拡張機能を有効にする必要があります -
typeにする必要がありますXR_TYPE_LIGHT_ESTIMATE_ANDROID -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタにする必要があります 。関連情報: XrAmbientLightANDROID、XrCubemapLightingDataANDROID、XrDirectionalLightANDROID、XrPointLightsANDROIDX1、XrSphericalHarmonicsANDROID -
stateは有効な XrLightEstimateStateANDROID 値にする必要があります。
XrAmbientLightANDROID 構造体には、シーン内の周囲光に関する照明推定データが含まれます。
typedef struct XrAmbientLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f colorCorrection;
} XrAmbientLightANDROID;
メンバーの説明
typeは、この構造体の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。有効な構造体には、XrSphericalHarmonicsANDROID、XrDirectionalLightANDROID があります。stateは、照明推定の状態を表す XrLightEstimateStateANDROID です。intensityは、XrVector3f であり、周囲光の強度を表します。ベクトルの各コンポーネントは、それぞれ赤、緑、青のチャンネルに対応しています。colorCorrectionは、XrVector3f で、ガンマ空間の値を持つものです。ガンマ色空間でレンダリングする場合は、レンダリング後に最終的に計算された色に対してコンポーネントごとに乗算します。線形空間でレンダリングする場合は、まず 2.2 乗して値を線形空間に変換し、レンダリング後に最終的に計算された色に対してコンポーネントごとに乗算します。The purpose of pname:colorCorrection is to make a scene appear natural and blend with the real world.
有効な使用方法(暗黙的)
- XrAmbientLightANDROID を使用する前に、
XR_ANDROID_light_estimation拡張機能を有効にする必要があります 。 -
typeはXR_TYPE_AMBIENT_LIGHT_ANDROIDにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタにする必要があります -
stateは有効な XrLightEstimateStateANDROID 値にする必要があります。
XrSphericalHarmonicsANDROID 構造体には、シーンの照明を表す球面調和関数が含まれます。
typedef struct XrSphericalHarmonicsANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrSphericalHarmonicsKindANDROID kind;
float coefficients[9][3];
} XrSphericalHarmonicsANDROID;
メンバーの説明
typeは、この構造体の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。有効な構造体には、XrAmbientLightANDROID、XrDirectionalLightANDROID があります。stateは、照明推定の状態を表す XrLightEstimateStateANDROID です。kindは、アプリケーションによってリクエストされた XrSphericalHarmonicsKindANDROID です。coefficientsは、9 行 3 列の 2 次元float配列です。3 列は、それぞれ赤、緑、青のカラーチャンネルに対応しています。各チャンネルには 9 個の球面調和関数係数があります。
coefficients は、方向を入力として受け取り、その方向から来る光の色を出力する特別な関数で使用されます。詳細については、こちらの論文をご覧ください。
有効な使用方法(暗黙的)
- XrSphericalHarmonicsANDROID を使用する前に、
XR_ANDROID_light_estimation拡張機能を有効にする必要があります。 -
typeはXR_TYPE_SPHERICAL_HARMONICS_ANDROIDにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタにする必要があります -
stateは有効な XrLightEstimateStateANDROID 値にする必要があります。 -
kindは有効な XrSphericalHarmonicsKindANDROID 値**にする必要があります**
XrSphericalHarmonicsKindANDROID 列挙型は、アプリケーションがリクエストしている球面調和関数のタイプをランタイムに識別します。
typedef enum XrSphericalHarmonicsKindANDROID {
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID = 0,
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID = 1,
XR_SPHERICAL_HARMONICS_KIND_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSphericalHarmonicsKindANDROID;
列挙値の意味は次のとおりです。
列挙型 説明
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID
球面調和関数係数は、主光からの寄与を除いた環境光の放射輝度関数を表します。
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID
球面調和関数係数は、主光からの寄与を含む環境光の放射輝度関数を表します。
XrDirectionalLightANDROID 構造体には照明推定データが含まれます。
typedef struct XrDirectionalLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f direction;
} XrDirectionalLightANDROID;
メンバーの説明
typeは、この構造体の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。有効な構造体には、XrAmbientLightANDROID、XrSphericalHarmonicsANDROID、XrDirectionalLightANDROID があります。stateは、照明推定の状態を表す XrLightEstimateStateANDROID です。intensityは、XrVector3f で、方向光の強度を表します。ベクトルの各コンポーネントは、赤、緑、青のチャンネルに対応しています。directionは、光の方向を表す XrVector3f です。
有効な使用方法(暗黙的)
- XrDirectionalLightANDROID を使用する前に、
XR_ANDROID_light_estimation拡張機能を有効にする必要があります 。 -
typeにする必要がありますXR_TYPE_DIRECTIONAL_LIGHT_ANDROID -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタにする必要があります -
stateは有効な XrLightEstimateStateANDROID 値にする必要があります。
XrLightEstimateStateANDROID 列挙型は、ランタイムから返される照明推定の状態を示します。
typedef enum XrLightEstimateStateANDROID {
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID = 0,
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID = 1,
XR_LIGHT_ESTIMATE_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrLightEstimateStateANDROID;
列挙値の意味は次のとおりです。
列挙型 説明
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID
照明推定は有効です
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID
照明推定は無効です
照明推定のサンプルコード
次のサンプルコードは、ランタイムから取得できるすべての照明推定量を取得する方法を示しています。
XrSession session; // Created at app startup
XrSpace appSpace; // Created previously.
PFN_xrCreateLightEstimatorANDROID xrCreateLightEstimatorANDROID; // Created previously.
PFN_xrDestroyLightEstimatorANDROID xrDestroyLightEstimatorANDROID; // Created previously.
PFN_xrGetLightEstimateANDROID xrGetLightEstimateANDROID; // Created previously.
XrLightEstimatorANDROID estimator;
XrLightEstimatorCreateInfoANDROID createInfo = {
.type = XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID};
CHK_XR(xrCreateLightEstimatorANDROID(session, &createInfo, &estimator));
// Every frame
XrTime updateTime; // Time used for the current frame's simulation update.
XrLightEstimateGetInfoANDROID info = {
.type = XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID,
.space = appSpace,
.time = updateTime,
};
XrDirectionalLightANDROID directionalLight = {
.type = XR_TYPE_DIRECTIONAL_LIGHT_ANDROID,
};
XrSphericalHarmonicsANDROID sphericalHarmonics = {
.type = XR_TYPE_SPHERICAL_HARMONICS_ANDROID,
.next = &directionalLight,
};
// Querying both TOTAL or AMBIENT spherical harmonics in one call will result in an error because chaining two structs with the same type is not allowed
bool useTotalSH;
if (useTotalSH) {
sphericalHarmonics.kind = XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID;
} else {
sphericalHarmonics.kind = XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID;
}
XrAmbientLightANDROID ambientLight = {
.type = XR_TYPE_AMBIENT_LIGHT_ANDROID,
.next = &sphericalHarmonics,
};
XrLightEstimateANDROID estimate = {
.type = XR_TYPE_LIGHT_ESTIMATE_ANDROID,
.next = &ambientLight,
};
XrResult result = xrGetLightEstimateANDROID(estimator, &info, &estimate);
if (result == XR_SUCCESS &&
estimate.state == XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID) {
// use directionalLight, totalSh, ambientSh, ambientLight if each
// struct has a valid state field
}
// When you want to disable light estimation
CHK_XR(xrDestroyLightEstimatorANDROID(estimator));
新しいオブジェクト タイプ
新しいコマンド
新しい構造体
- XrLightEstimateANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimatorCreateInfoANDROID
XrLightEstimateANDROID の拡張 :
XrSystemProperties の拡張 :
新しい列挙型
新しい列挙型定数
XR_ANDROID_LIGHT_ESTIMATION_EXTENSION_NAMEXR_ANDROID_light_estimation_SPEC_VERSIONXrObjectType の拡張 :
XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID
XrStructureType の拡張 :
XR_TYPE_AMBIENT_LIGHT_ANDROIDXR_TYPE_DIRECTIONAL_LIGHT_ANDROIDXR_TYPE_LIGHT_ESTIMATE_ANDROIDXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROIDXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROIDXR_TYPE_SPHERICAL_HARMONICS_ANDROIDXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID
問題
変更履歴
リビジョン 1、2024-09-16(Cairn Overturf)
- 拡張機能の最初の説明