名稱字串
XR_ANDROID_light_estimation
擴充功能類型
執行個體擴充功能
擴充功能註冊編號
701
修訂版本
1
擴充功能和版本依附元件
上次修改日期
2025-01-17
IP 狀態
未發現任何智慧財產權聲明。
著作人
Google 員工 Jared Finder
Google 的 Cairn Overturf
Google 員工 Spencer Quin
Google 的 Levana Chen
Google 的 Nihav Jain
Google 的 Salar Khan
Google 的 Scott Chung
總覽
透過這項擴充功能,應用程式可要求取得頭戴式裝置周圍真實環境光照的資料。這項資訊可用於算繪虛擬物體,使這些物體的光照條件與其所處的場景相同。
檢查系統功能
應用程式可以在呼叫 xrGetSystemProperties 時,將 XrSystemLightEstimationPropertiesANDROID 結構體鏈結至 XrSystemProperties,藉此檢查系統是否支援光線估算。
typedef struct XrSystemLightEstimationPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
成員說明
- type是這個結構的 XrStructureType。
- next是- NULL,或是指向結構體鏈結中下一個結構體的指標。核心 OpenXR 或這個擴充功能中未定義這類結構。
- supportsLightEstimation是- XrBool32,指出目前的系統是否支援光線估算。
應用程式可以透過呼叫 xrGetSystemProperties 時,使用 XrSystemLightEstimationPropertiesANDROID 結構體擴充 XrSystemProperties,檢查系統是否支援光線估算。
如果系統無法支援光線估算,則會針對 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 銷毀控制代碼。
有效用量 (隱含)
- 必須先啟用 XR_ANDROID_light_estimation擴充功能,才能呼叫 xrCreateLightEstimatorANDROID
- 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。
有效用量 (隱含)
- XR_ANDROID_light_estimation擴充功能必須先啟用,才能呼叫 xrDestroyLightEstimatorANDROID
- 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 結構體的指標。
有效用量 (隱含)
- 必須先啟用 XR_ANDROID_light_estimation擴充功能,才能呼叫 xrGetLightEstimateANDROID
- 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、 XrEnvironmentLightingCubemapANDROID 和 XrDirectionalLightANDROID。
- state是 XrLightEstimateStateANDROID,代表光線估計狀態。
- lastUpdatedTime是- XrTime,代表上次計算預估值的時間。
如要取得環境光照立方體、環境光、球諧函數和主要方向光的亮度估計資訊,應用程式可以分別將下列結構體的執行個體鏈結至 XrLightEstimateANDROID::next:XrEnvironmentLightingCubemapANDROID、XrAmbientLightANDROID、XrSphericalHarmonicsANDROID 和 XrDirectionalLightANDROID。
有效用量 (隱含)
- 使用 XrLightEstimateANDROID 前,XR_ANDROID_light_estimation擴充功能必須啟用
- type必須為- XR_TYPE_LIGHT_ESTIMATE_ANDROID
- next必須是- NULL,或是結構體鏈結中下一個結構體的有效指標。另請參閱:XrAmbientLightANDROID、 XrDirectionalLightANDROID、 XrEnvironmentLightingCubemapANDROID、 XrSphericalHarmonicsANDROID
- 「state」必須是有效的 XrLightEstimateStateANDROID 值
XrEnvironmentLightingCubemapANDROID 結構包含場景環境光源的立方體格式光源估算資料。
typedef struct XrEnvironmentLightingCubemapANDROID {
    XrStructureType                type;
    void*                          next;
    XrLightEstimateStateANDROID    state;
    const float*                   cubemapRightImage;
    const float*                   cubemapLeftImage;
    const float*                   cubemapTopImage;
    const float*                   cubemapBottomImage;
    const float*                   cubemapFrontImage;
    const float*                   cubemapBackImage;
    uint32_t                       resolution;
    XrQuaternionf                  rotation;
    XrTime                         centerExposureTime;
} XrEnvironmentLightingCubemapANDROID;
成員說明
- type是這個結構的 XrStructureType。
- next是- NULL,或是指向結構鏈中下一個結構的指標。 有效結構包括 XrSphericalHarmonicsANDROID、XrAmbientLightANDROID 和 XrDirectionalLightANDROID。
- state是 XrLightEstimateStateANDROID,代表光線估計狀態。
- cubemapRightImage是- float*,代表立方體對應地圖右側的 R32G32B32_SFLOAT 緩衝區。請注意,這是 HDR,因此浮點值可以大於 1.0。
- cubemapLeftImage是- float*,代表正方體地圖左側的 R32G32B32_SFLOAT 緩衝區。請注意,這是 HDR,因此浮點值可以大於 1.0。
- cubemapTopImage是代表立方體地圖頂端 R32G32B32_SFLOAT 緩衝區的- float*。請注意,這是 HDR,因此浮點值可以大於 1.0。
- cubemapBottomImage是- float*,代表立方體地圖底部的 R32G32B32_SFLOAT 緩衝區。請注意,這是 HDR,因此浮點值可以大於 1.0。
- cubemapFrontImage是- float*,代表立方體正面的 R32G32B32_SFLOAT 緩衝區。請注意,這是 HDR,因此浮點值可以大於 1.0。
- resolution是- uint32_t,代表立方體各面圖片的寬度和高度。
- rotation是代表立方體對應旋轉的 XrQuaternionf。
- centerExposureTime是- XrTime,代表擷取立方體對應的時間。適用於在立方體對應之間進行內插。
有效用量 (隱含)
- 使用 XrEnvironmentLightingCubemapANDROID 前,XR_ANDROID_light_estimation擴充功能必須啟用
- type必須為- XR_TYPE_ENVIRONMENT_LIGHTING_CUBEMAP_ANDROID
- next必須是- NULL,或是指向結構體鏈結中下一個結構體的有效指標
- 「state」必須是有效的 XrLightEstimateStateANDROID 值
- cubemapRightImage必須是指向有效浮點值的指標
- cubemapLeftImage必須是指向有效浮點值的指標
- cubemapTopImage必須是指向有效浮點值的指標
- cubemapBottomImage必須是指向有效浮點值的指標
- cubemapFrontImage必須是指向有效浮點值的指標
- cubemapBackImage必須是指向有效浮點值的指標
XrAmbientLightANDROID 結構包含場景中環境光線的光線估計資料。
typedef struct XrAmbientLightANDROID {
    XrStructureType                type;
    void*                          next;
    XrLightEstimateStateANDROID    state;
    XrVector3f                     intensity;
    XrVector3f                     colorCorrection;
} XrAmbientLightANDROID;
成員說明
- type是這個結構的 XrStructureType。
- next是- NULL,或是指向結構鏈中下一個結構的指標。 有效結構為 XrSphericalHarmonicsANDROID、XrEnvironmentLightingCubemapANDROID 和 XrDirectionalLightANDROID。
- state是 XrLightEstimateStateANDROID,代表光線估計狀態。
- intensity是- XrVector3,代表環境光的強度。向量的每個分量分別對應紅色、綠色和藍色通道。
- colorCorrection是- XrVector3,值位於 Gamma 空間。將 Gamma 校正後算繪的顏色與這些值逐一相乘。
有效用量 (隱含)
- 使用 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、XrEnvironmentLightingCubemapANDROID 和 XrDirectionalLightANDROID。
- state是 XrLightEstimateStateANDROID,代表光線估計狀態。
- kind是應用程式要求的 XrSphericalHarmonicsKindANDROID。
- coefficients是二維- float陣列,維度為 9 列和 3 欄。分別對應紅色、綠色和藍色通道的 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;
列舉的意義如下:
| Enum | 說明 | 
| 
 | 球諧係數代表環境光亮度函式,包括主要光源的貢獻。 | 
| 
 | 球諧係數代表環境光亮度函式,但不包括主燈的貢獻。 | 
XrLightEstimateStateANDROID 列舉會向執行階段指出應用程式要求哪種球諧函數。
typedef enum XrLightEstimateStateANDROID {
    XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID = 0,
    XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID = 1
} XrLightEstimateStateANDROID;
列舉的意義如下:
| Enum | 說明 | 
| 
 | 光線估算結果有效 | 
| 
 | 預估值無效 | 
光線估算範例程式碼
下列程式碼範例示範如何從執行階段取得所有可能的亮度估算量。
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,
};
XrEnvironmentLightingCubemapANDROID lightingCubemap {
    .type = XR_TYPE_ENVIRONMENT_LIGHTING_CUBEMAP_ANDROID,
    .next = &ambientLight,
}
XrLightEstimateANDROID estimate = {
    .type = XR_TYPE_LIGHT_ESTIMATE_ANDROID,
    .next = &lightingCubemap,
};
XrResult result = xrGetLightEstimateANDROID(estimator, &info, &estimate);
if (result == XR_SUCCESS &&
    estimate.state == XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID) {
  // use directionalLight, totalSh, ambientSh, ambientLight,
  // lightingCubemap, 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
- XR_TYPE_ENVIRONMENT_LIGHTING_CUBEMAP_ANDROID
新列舉
新結構
- XrLightEstimatorCreateInfoANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimateANDROID
- XrDirectionalLightANDROID
- XrSphericalHarmonicsANDROID
- XrAmbientLightANDROID
- XrSystemLightEstimationPropertiesANDROID
- XrEnvironmentLightingCubemapANDROID
新函式
問題
版本記錄
- 修訂版本 2,2025-01-17 (Salar Khan)
- 新增環境光照立方體支援
 
- 修訂版本 1,2024-09-16 (Cairn Overturf)
- 擴充功能初始說明
 
OpenXR™ 和 OpenXR 標誌是 The Khronos Group Inc. 的商標,已在中國、歐盟、日本和英國註冊為商標。
