名稱字串
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 時,使用 XrSystemLightEstimationPropertiesANDROID 結構延伸 XrSystemProperties,檢查系統是否支援光線估算。
如果系統無法支援光線估算,則會針對 supportsLightEstimation
傳回 XR_FALSE
,以及來自 xrCreateLightEstimatorANDROID 的 XR_ERROR_FEATURE_UNSUPPORTED
。
有效用法 (隱含)
- 您必須先啟用 XR_ANDROID_light_estimation 擴充功能,才能使用 XrSystemLightEstimationPropertiesANDROID
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 或這個擴充功能中並未定義這類結構。
有效用法 (隱含)
- 您必須先啟用
XR_ANDROID_light_estimation
擴充功能,才能使用 XrLightEstimatorCreateInfoANDROID 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 和 XrDirectionalLightANDROID。state
是 XrLightEstimateStateANDROID,代表光線估計的狀態。lastUpdatedTime
是XrTime
,代表上次計算預估值的時間。
如要取得環境光、球面調和和主要方向光的光線估計資訊,應用程式可以將以下結構體的例項連結至 XrLightEstimateANDROID::next,分別為 XrAmbientLightANDROID、XrSphericalHarmonicsANDROID 和 XrDirectionalLightANDROID。
有效用法 (隱含)
- 您必須先啟用
XR_ANDROID_light_estimation
擴充功能,才能使用 XrLightEstimateANDROID 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
。將 Gamma 修正算繪的顏色乘以這些值。
有效用法 (隱含)
- 您必須先啟用
XR_ANDROID_light_estimation
擴充功能,才能使用 XrAmbientLightANDROID 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
是二維float
陣列,其維度為 9 列和 3 欄。3 個欄分別對應到紅、綠和藍色色版。每個頻道都有 9 個球諧係數。
有效用法 (隱含)
- 您必須先啟用
XR_ANDROID_light_estimation
擴充功能,才能使用 XrSphericalHarmonicsANDROID 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,
};
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-09-16 (Cairn Overturf)
- 初始擴充功能說明