名前の文字列
XR_ANDROID_light_estimation
拡張機能の種類
インスタンスの拡張
登録されている電話番号
701
リビジョン
1
拡張機能とバージョンの依存関係
最終更新日
2024-09-18
IP ステータス
既知の IP に関する申し立てはありません。
寄与者
Jared Finder、Google
Cairn Overturf、Google
Spencer Quin、Google
Levana Chen、Google
Nihav Jain、Google
概要
この拡張機能により、ヘッドセットの周囲の現実環境の照明を表すデータをアプリがリクエストできるようになります。この情報は、仮想オブジェクトのレンダリング時に使用し、配置されているシーンと同じ条件で照明を当てることができます。
システムの機能を確認する
アプリは、xrGetSystemProperties を呼び出すときに XrSystemLightEstimationPropertiesANDROID 構造を XrSystemProperties に連結することで、システムが光の推定をサポートしているかどうかを検査できます。
typedef struct XrSystemLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
メンバーの説明
type
は、この構造の XrStructureType です。next
はNULL
または構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。supportsLightEstimation
はXrBool32
で、現在のシステムが光の推定をサポートしているかどうかを示します。
アプリは、xrGetSystemProperties を呼び出すときに XrSystemProperties を XrSystemLightEstimationPropertiesANDROID 構造で拡張することで、システムが光の推定をサポートできるかどうかを検査できます。
システムが光の推定をサポートできない場合は、supportsLightEstimation
に XR_FALSE
、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 関数を使用してライト エスティメータを作成できます。
- システムが光の推定をサポートしていない場合、xrCreateLightEstimatorANDROID は
XR_ERROR_FEATURE_UNSUPPORTED
を返します。 - 呼び出し元のアプリに必要な権限が付与されていない場合、xrCreateLightEstimatorANDROID は
XR_ERROR_PERMISSION_INSUFFICIENT
を返します。
返されたライト エスティメーター ハンドルは、後で API 呼び出しで使用される可能性があります。アプリケーションが光量推定データへのアクセスを終了したことをランタイムに示す場合は、xrDestroyLightEstimatorANDROID を使用してハンドルを破棄する必要があります。
有効な使用方法(暗黙的)
- xrCreateLightEstimatorANDROID を呼び出す前に、
XR_ANDROID_light_estimation
拡張機能を有効にする必要があります。 session
は有効な XrSession ハンドルである必要があります。createInfo
は XrLightEstimatorCreateInfoANDROID 構造体へのポインタである必要があります。outHandle
は XrLightEstimatorANDROID ハンドルへのポインタである必要があります。
戻りコード
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_HANDLE_INVALID
XR_ERROR_LIMIT_REACHED
XrLightEstimatorCreateInfoANDROID 構造体には、XrLightEstimatorANDROID ハンドルを作成する情報が記述されています。
typedef struct XrLightEstimatorCreateInfoANDROID {
XrStructureType type;
void* next;
} XrLightEstimatorCreateInfoANDROID;
メンバーの説明
type
は、この構造の XrStructureType です。next
はNULL
または構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。
有効な使用方法(暗黙的)
- XrLightEstimatorCreateInfoANDROID を使用する前に、
XR_ANDROID_light_estimation
拡張機能を有効にする必要があります。 type
はXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体への有効なポインタである必要があります。
xrDestroyLightEstimatorANDROID 関数は、estimator
とその基盤となるリソースを解放します。
XrResult xrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator);
パラメータの説明
estimator
は、xrCreateLightEstimatorANDROID によって以前に作成された XrLightEstimatorANDROID です。
有効な使用方法(暗黙的)
- xrDestroyLightEstimatorANDROID を呼び出す前に、
XR_ANDROID_light_estimation
拡張機能を有効にする必要があります。 estimator
は有効な XrLightEstimatorANDROID ハンドルである必要があります。
スレッドセーフ
estimator
と子ハンドルへのアクセスは、外部で同期する必要があります。
戻りコード
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
照明の推定データにアクセスする
xrGetLightEstimateANDROID 関数は次のように定義されます。
XrResult xrGetLightEstimateANDROID(
XrLightEstimatorANDROID estimator,
const XrLightEstimateGetInfoANDROID* input,
XrLightEstimateANDROID* output);
パラメータの説明
estimator
:xrCreateLightEstimatorANDROID
で以前に作成した XrLightEstimatorANDROID へのハンドル。input
: XrLightEstimateGetInfoANDROID 構造へのポインタ。output
: XrLightEstimateANDROID 構造へのポインタ。
有効な使用方法(暗黙的)
- xrGetLightEstimateANDROID を呼び出す前に、
XR_ANDROID_light_estimation
拡張機能を有効にする必要があります。 estimator
は有効な XrLightEstimatorANDROID ハンドルである必要があります。input
は、有効な XrLightEstimateGetInfoANDROID 構造体へのポインタである必要があります。output
は XrLightEstimateANDROID 構造体へのポインタである必要があります。
戻りコード
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_TIME_INVALID
XrLightEstimateGetInfoANDROID は、光の推定データを取得するために必要な情報を記述します。
typedef struct XrLightEstimateGetInfoANDROID {
XrStructureType type;
void* next;
XrSpace space;
XrTime time;
} XrLightEstimateGetInfoANDROID;
メンバーの説明
type
は、この構造の XrStructureType です。next
はNULL
または構造体チェーンの次の構造体へのポインタです。space
は、返された光の方向と球面調和関数が表現される参照空間を定義する XrSpace です。time
は、アプリケーションが光の推定値をクエリする時刻を記述するXrTime
です。
有効な使用方法(暗黙的)
- XrLightEstimateGetInfoANDROID を使用する前に、
XR_ANDROID_light_estimation
拡張機能を有効にする必要があります。 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
です。
アンビエント ライト、球面調和関数、プライマリ ディレクショナル ライトの光の推定情報を取得するには、アプリケーションで、XrAmbientLightANDROID、XrSphericalHarmonicsANDROID、XrDirectionalLightANDROID の各構造のインスタンスを XrLightEstimateANDROID::next に連結します。
有効な使用方法(暗黙的)
- XrLightEstimateANDROID を使用する前に、
XR_ANDROID_light_estimation
拡張機能を有効にする必要があります。 type
はXR_TYPE_LIGHT_ESTIMATE_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体を指す有効なポインタである必要があります。関連情報: XrAmbientLightANDROID、XrDirectionalLightANDROID、XrSphericalHarmonicsANDROIDstate
は有効な 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
は、周囲光の強度を表すXrVector3
です。ベクトルの各要素は、赤、緑、青の各チャネルに対応しています。colorCorrection
は、ガンマ空間の値を持つXrVector3
です。ガンマ補正済みレンダリングの色をこれらの値でコンポーネントごとに乗算します。
有効な使用方法(暗黙的)
- 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 個の球面調和係数があります。
有効な使用方法(暗黙的)
- XrSphericalHarmonicsANDROID を使用する前に、
XR_ANDROID_light_estimation
拡張機能を有効にする必要があります。 type
はXR_TYPE_SPHERICAL_HARMONICS_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体への有効なポインタである必要があります。state
は有効な XrLightEstimateStateANDROID 値である必要があります。kind
は有効な XrSphericalHarmonicsKindANDROID 値である必要があります。
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
は、指向性ライトの強度を表すXrVector3
です。ベクトルの各コンポーネントは、赤、緑、青のチャネルに対応しています。direction
は、光の方向を表すXrVector3
です。
有効な使用方法(暗黙的)
- XrDirectionalLightANDROID を使用する前に、
XR_ANDROID_light_estimation
拡張機能を有効にする必要があります。 type
はXR_TYPE_DIRECTIONAL_LIGHT_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体への有効なポインタである必要があります。state
は有効な XrLightEstimateStateANDROID 値である必要があります。
XrSphericalHarmonicsKindANDROID 列挙型は、アプリケーションがリクエストしている球面調和関数のタイプをランタイムに識別します。
typedef enum XrSphericalHarmonicsKindANDROID {
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID = 0,
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID = 1
} XrSphericalHarmonicsKindANDROID;
列挙型の意味は次のとおりです。
列挙型 |
説明 |
|
球面調和係数は、メインライトからの寄与を除いた環境光の放射輝度関数を表します。 |
|
球面調和係数は、メインライトからの寄与を含む環境光の放射輝度関数を表します。 |
XrLightEstimateStateANDROID 列挙型は、アプリケーションがリクエストしている球面調和関数のタイプをランタイムに識別します。
typedef enum XrLightEstimateStateANDROID {
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID = 0,
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID = 1
} XrLightEstimateStateANDROID;
列挙型の意味は次のとおりです。
列挙型 |
説明 |
|
照明の見積もりが有効である |
|
照明の見積もりが正しくない |
光の推定のサンプルコード
次のサンプルコードは、実行時に考えられるすべての光量推定量を取得する方法を示しています。
XrSession session; // Created at app startup
XrSpace appSpace; // 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 totalSh = {
.type = XR_TYPE_SPHERICAL_HARMONICS_ANDROID,
.kind = XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID,
.next = &directionalLight,
};
XrSphericalHarmonicsANDROID ambientSh = {
.type = XR_TYPE_SPHERICAL_HARMONICS_ANDROID,
.kind = XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID,
.next = &totalSh,
};
XrAmbientLightANDROID ambientLight = {
.type = XR_TYPE_AMBIENT_LIGHT_ANDROID,
.next = &ambientSh,
};
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));
新しいオブジェクト タイプ
XrLightEstimator
XrObjectType 列挙型が拡張され、次のように変更されました。
XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID
XrStructureType 列挙型が拡張され、次のように変更されました。
XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROID
XR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROID
XR_TYPE_LIGHT_ESTIMATE_ANDROID
XR_TYPE_DIRECTIONAL_LIGHT_ANDROID
XR_TYPE_SPHERICAL_HARMONICS_ANDROID
XR_TYPE_AMBIENT_LIGHT_ANDROID
新しい列挙型
新しい構造
- XrLightEstimatorCreateInfoANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimateANDROID
- XrDirectionalLightANDROID
- XrSphericalHarmonicsANDROID
- XrAmbientLightANDROID
- XrSystemLightEstimationPropertiesANDROID
新機能
問題
変更履歴
- リビジョン 1、2024 年 9 月 16 日(Cairn Overturf)
- 最初の拡張機能の説明