Строка имени
XR_ANDROID_light_estimation
Тип расширения
Расширение экземпляра
Зарегистрированный внутренний номер
701
Редакция
1
Зависимости расширений и версий
Дата последнего изменения
2024-09-18
IP-статус
Нет известных претензий на интеллектуальную собственность.
Авторы
Джаред Файндер, Google
Кэрн Овертерф, Google
Спенсер Куин, Google
Левана Чен, Google
Нихав Джайн, Google
Обзор
Это расширение позволяет приложению запрашивать данные, представляющие освещение реальной среды вокруг гарнитуры. Эту информацию можно использовать при рендеринге виртуальных объектов, чтобы осветить их в тех же условиях, что и сцена, в которой они размещены.
Проверьте возможности системы
Приложение может проверить, поддерживает ли система оценку освещенности, связывая структуру XrSystemLightEstimationPropertiesANDROID с XrSystemProperties при вызове xrGetSystemProperties .
typedef struct XrSystemLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
Описания участников
-
type
— это XrStructureType этой структуры. -
next
имеет значениеNULL
или указатель на следующую структуру в цепочке структур. Никакие такие структуры не определены в ядре OpenXR или этом расширении. -
supportsLightEstimation
— этоXrBool32
, указывающий, поддерживает ли текущая система оценку освещенности.
Приложение может проверить, способна ли система поддерживать оценку освещенности, расширив XrSystemProperties структурой XrSystemLightEstimationPropertiesANDROID при вызове xrGetSystemProperties .
Если система не поддерживает оценку освещенности, она вернет XR_FALSE
для supportsLightEstimation
и XR_ERROR_FEATURE_UNSUPPORTED
для xrCreateLightEstimatorANDROID .
Допустимое использование (неявное)
- Расширение 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
— это XrLightEstimatorANDROID , ранее созданный xrCreateLightEstimatorANDROID .
Допустимое использование (неявное)
- Расширение
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
: дескриптор XrLightEstimatorANDROID, ранее созданного с помощьюxrCreateLightEstimatorANDROID
. -
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
, который описывает время, в которое приложение желает запросить оценку освещенности.
Допустимое использование (неявное)
- Расширение
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
, обозначающий дату последнего расчета оценки.
Чтобы получить информацию об оценке освещенности для окружающего освещения, сферических гармоник и основного направленного света, приложения могут связывать экземпляры следующих структур: XrAmbientLightANDROID , XrSphericalHarmonicsANDROID и XrDirectionalLightANDROID соответственно с XrLightEstimateANDROID::next .
Допустимое использование (неявное)
- Расширение
XR_ANDROID_light_estimation
необходимо включить перед использованием XrLightEstimateANDROID. -
type
должен бытьXR_TYPE_LIGHT_ESTIMATE_ANDROID
-
next
должен бытьNULL
или действительным указателем на следующую структуру в цепочке структур . См. также: XrAmbientLightANDROID , XrDirectionalLightANDROID , 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
— этоXrVector3
представляющий интенсивность окружающего света. Каждый компонент вектора соответствует красному, зеленому и синему каналам. -
colorCorrection
— этоXrVector3
со значениями в гамма-пространстве. Покомпонентно умножьте цвет вашего гамма-рендера на эти значения.
Допустимое использование (неявное)
- Расширение
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 столбца. Три столбца соответствуют цветовым каналам: красному, зеленому и синему соответственно. Каждый канал имеет 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
представляющий направление света.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_light_estimation
необходимо включить перед использованием XrDirectionalLightANDROID. -
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
- XrLightОценкаANDROID
- XrDirectionalLightANDROID
- XrSphericalHarmonicsANDROID
- XrAmbientLightANDROID
- XrSystemLightEstimationСвойстваANDROID
Новые функции
Проблемы
История версий
- Редакция 1, 16 сентября 2024 г. (Cairn Overturf)
- Первоначальное описание расширения