Имя Строка
XR_ANDROID_light_estimation
Тип расширения
Расширение экземпляра
Зарегистрированный добавочный номер
701
Пересмотр
1
Зависимости расширений и версий
Дата последнего изменения
2025-01-17
Статус ИС
Нет известных претензий на права интеллектуальной собственности.
Участники
Джаред Файндер, Google
Керн Овертерф, Google
Спенсер Куин, 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
, описывающее время, в которое приложение хочет запросить оценку освещенности.
Допустимое использование (подразумеваемое)
- Перед использованием 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
, который показывает, когда оценка была рассчитана в последний раз.
Чтобы получить информацию об оценке освещенности для кубической карты освещения окружающей среды, окружающего освещения, сферических гармоник и первичного направленного света, приложения могут объединять экземпляры следующих структур: XrEnvironmentLightingCubemapANDROID , XrAmbientLightANDROID , XrSphericalHarmonicsANDROID и XrDirectionalLightANDROID соответственно в XrLightEstimateANDROID::next .
Допустимое использование (подразумеваемое)
- Перед использованием 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, поэтому значения float могут быть больше 1,0. -
cubemapLeftImage
— этоfloat*
представляющий буфер R32G32B32_SFLOAT левой стороны кубической карты. Обратите внимание, что это HDR, поэтому значения float могут быть больше 1,0. -
cubemapTopImage
— этоfloat*
представляющий буфер R32G32B32_SFLOAT верхней стороны кубической карты. Обратите внимание, что это HDR, поэтому значения float могут быть больше 1,0. -
cubemapBottomImage
— этоfloat*
представляющий буфер R32G32B32_SFLOAT нижней стороны кубической карты. Обратите внимание, что это HDR, поэтому значения float могут быть больше 1,0. -
cubemapFrontImage
— этоfloat*
представляющий буфер R32G32B32_SFLOAT передней стороны кубической карты. Обратите внимание, что это HDR, поэтому значения float могут быть больше 1,0. -
resolution
— этоuint32_t
представляющее ширину и высоту изображения каждой стороны кубической карты. Обратите внимание, что это HDR, поэтому значения float могут быть больше 1,0. -
rotation
— это XrQuaternionf, представляющий вращение кубической карты. -
centerExposureTime
— этоXrTime
, представляющий время захвата кубической карты. Полезно для интерполяции между кубическими картами.
Допустимое использование (подразумеваемое)
- Расширение
XR_ANDROID_light_estimation
должно быть включено перед использованием XrEnvironmentLightingCubemapANDROID -
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
со значениями в гамма-пространстве. Покомпонентно умножьте цвет вашего гамма-скорректированного рендера на эти значения.
Допустимое использование (подразумеваемое)
- Перед использованием 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;
Перечисления имеют следующие значения:
Перечисление | Описание |
| Коэффициенты сферической гармоники представляют собой функцию яркости окружающего света, исключая вклад основного света. |
| Коэффициенты сферической гармоники представляют собой функцию яркости окружающего света, включая вклад основного света. |
Перечисление 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,
};
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
Новые перечисления
Новые структуры
- XrLightEstimatorСоздатьИнформациюANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimateANDROID
- XrDirectionalLightANDROID
- XrСферическиеГармоникиANDROID
- XrAmbientLightANDROID
- XrSystemLightEstimationСвойстваANDROID
- XrОкружающая средаОсвещениеКубКартаANDROID
Новые функции
Проблемы
История версий
- Редакция 2, 2025-01-17 (Салар Хан)
- Добавлена поддержка кубической карты освещения окружающей среды.
- Редакция 1, 2024-09-16 (Cairn Overturf)
- Первоначальное описание расширения
OpenXR™ и логотип OpenXR являются товарными знаками компании Khronos Group Inc. и зарегистрированы в качестве товарного знака в Китае, Европейском Союзе, Японии и Великобритании.