Cadena de nombre
XR_ANDROID_light_estimation
Tipo de extensión
Extensión de la instancia
Número de extensión registrado
701
Revisión
1
Dependencias de extensiones y versiones
Fecha de la última modificación
2025-01-17
Estado de la IP
No hay reclamos conocidos por IP.
Colaboradores
Jared Finder, Google
Cairn Overturf, de Google
Spencer Quin, de Google
Levana Chen, de Google
Nihav Jain, de Google
Salar Khan, de Google
Scott Chung, de Google
Descripción general
Esta extensión permite que la aplicación solicite datos que representan la iluminación del entorno del mundo real alrededor del visor. Esta información se puede usar cuando se renderizan objetos virtuales para iluminarlos en las mismas condiciones que la escena en la que se colocan.
Inspecciona la capacidad del sistema
Una aplicación puede inspeccionar si el sistema admite la estimación de luz encadenando una estructura XrSystemLightEstimationPropertiesANDROID a XrSystemProperties cuando se llama a xrGetSystemProperties.
typedef struct XrSystemLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.supportsLightEstimationes unXrBool32que indica si el sistema actual admite la estimación de luz.
Una aplicación puede inspeccionar si el sistema es capaz de admitir la estimación de luz extendiendo XrSystemProperties con la estructura XrSystemLightEstimationPropertiesANDROID cuando se llama a xrGetSystemProperties.
Si el sistema no es capaz de admitir la estimación de luz, devolverá XR_FALSE para supportsLightEstimation y XR_ERROR_FEATURE_UNSUPPORTED de xrCreateLightEstimatorANDROID.
Uso válido (implícito)
- La extensión XR_ANDROID_light_estimation debe habilitarse antes de usar XrSystemLightEstimationPropertiesANDROID.
typedebe serXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROIDnextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras
Crea un identificador del estimador de luz
XR_DEFINE_HANDLE(XrLightEstimatorANDROID)
El identificador de XrLightEstimatorANDROID representa un estimador de luz. Este identificador se puede usar para acceder a la información de estimación de luz con otras funciones de esta extensión.
La función xrCreateLightEstimatorANDROID se define de la siguiente manera:
XrResult xrCreateLightEstimatorANDROID(
XrSession session,
XrLightEstimatorCreateInfoANDROID* createInfo,
XrLightEstimatorANDROID* outHandle);
Descripciones de parámetros
sessiones el XrSession que crea el estimador de luz.createInfoes un puntero a una estructura XrLightEstimatorCreateInfoANDROID que contiene parámetros que se usarán para crear el estimador de luz.outHandlees un puntero a un identificador en el que se devuelve el XrLightEstimatorANDROID creado.
La aplicación puede usar la función xrCreateLightEstimatorANDROID para crear un estimador de luz.
- xrCreateLightEstimatorANDROID devolverá
XR_ERROR_FEATURE_UNSUPPORTEDsi el sistema no admite la estimación de luz. - xrCreateLightEstimatorANDROID devolverá
XR_ERROR_PERMISSION_INSUFFICIENTsi no se otorgaron los permisos necesarios a la aplicación que realiza la llamada.
El identificador del estimador de luz que se devuelve puede usarse posteriormente en llamadas a la API. Si una aplicación quiere indicarle al tiempo de ejecución que terminó de acceder a los datos de estimación de luz, debe destruir el identificador con xrDestroyLightEstimatorANDROID.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimationdebe habilitarse antes de llamar a xrCreateLightEstimatorANDROID. sessiondebe ser un identificador de XrSession válidocreateInfodebe ser un puntero a una estructura XrLightEstimatorCreateInfoANDROIDoutHandledebe ser un puntero a un identificador de XrLightEstimatorANDROID.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_HANDLE_INVALIDXR_ERROR_LIMIT_REACHED
La estructura XrLightEstimatorCreateInfoANDROID describe la información para crear un identificador XrLightEstimatorANDROID.
typedef struct XrLightEstimatorCreateInfoANDROID {
XrStructureType type;
void* next;
} XrLightEstimatorCreateInfoANDROID;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimationdebe habilitarse antes de usar XrLightEstimatorCreateInfoANDROID typedebe serXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROIDnextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras
La función xrDestroyLightEstimatorANDROID libera el estimator y todos los recursos subyacentes.
XrResult xrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator);
Descripciones de parámetros
estimatores un objeto XrLightEstimatorANDROID creado previamente por xrCreateLightEstimatorANDROID.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimationdebe habilitarse antes de llamar a xrDestroyLightEstimatorANDROID. estimatordebe ser un identificador XrLightEstimatorANDROID válido.
Seguridad de subprocesos
- El acceso a
estimatory a cualquier identificador secundario debe sincronizarse de forma externa.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Cómo acceder a los datos de estimación de luz
La función xrGetLightEstimateANDROID se define de la siguiente manera:
XrResult xrGetLightEstimateANDROID(
XrLightEstimatorANDROID estimator,
const XrLightEstimateGetInfoANDROID* input,
XrLightEstimateANDROID* output);
Descripciones de parámetros
estimator: Es el identificador de un objeto XrLightEstimatorANDROID creado anteriormente conxrCreateLightEstimatorANDROID.input: Es un puntero a una estructura XrLightEstimateGetInfoANDROID.output: Puntero a una estructura XrLightEstimateANDROID.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimationdebe habilitarse antes de llamar a xrGetLightEstimateANDROID. estimatordebe ser un identificador XrLightEstimatorANDROID válido.inputdebe ser un puntero a una estructura XrLightEstimateGetInfoANDROID válida.outputdebe ser un puntero a una estructura XrLightEstimateANDROID.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_TIME_INVALID
Un XrLightEstimateGetInfoANDROID describe la información necesaria para obtener datos de estimación de luz.
typedef struct XrLightEstimateGetInfoANDROID {
XrStructureType type;
void* next;
XrSpace space;
XrTime time;
} XrLightEstimateGetInfoANDROID;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras.spacees el XrSpace que define el espacio de referencia en el que se expresan la dirección de la luz y los armónicos esféricos, y la rotación del mapa cúbico devueltos.timees el objetoXrTimeque describe la hora en la que la aplicación desea consultar la estimación de luz.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimationdebe habilitarse antes de usar XrLightEstimateGetInfoANDROID. typedebe serXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROIDnextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructurasspacedebe ser un identificador de XrSpace válido
La estructura XrLightEstimateANDROID contiene datos de estimación de la luz.
typedef struct XrLightEstimateANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrTime lastUpdatedTime;
} XrLightEstimateANDROID;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. Las estructuras válidas son XrAmbientLightANDROID, XrSphericalHarmonicsANDROID, XrEnvironmentLightingCubemapANDROID y XrDirectionalLightANDROID.statees el XrLightEstimateStateANDROID que representa el estado de la estimación de luz.lastUpdatedTimees elXrTimeque representa el momento en que se calculó la última estimación.
Para obtener información sobre la estimación de luz del mapa de cubos de iluminación del entorno, la luz ambiental, los armónicos esféricos y la luz direccional principal, las aplicaciones pueden encadenar instancias de las siguientes estructuras, XrEnvironmentLightingCubemapANDROID, XrAmbientLightANDROID, XrSphericalHarmonicsANDROID y XrDirectionalLightANDROID, respectivamente, en XrLightEstimateANDROID::next.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimationdebe habilitarse antes de usar XrLightEstimateANDROID. typedebe serXR_TYPE_LIGHT_ESTIMATE_ANDROIDnextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras. Consulta también: XrAmbientLightANDROID, XrDirectionalLightANDROID, XrEnvironmentLightingCubemapANDROID, XrSphericalHarmonicsANDROIDstatedebe ser un valor de XrLightEstimateStateANDROID válido
La estructura XrEnvironmentLightingCubemapANDROID contiene datos de estimación de la luz en formato de mapa de cubo sobre la iluminación del entorno de la escena.
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;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. Las estructuras válidas son XrSphericalHarmonicsANDROID, XrAmbientLightANDROID y XrDirectionalLightANDROID.statees el XrLightEstimateStateANDROID que representa el estado de la estimación de luz.cubemapRightImagees unfloat*que representa el búfer R32G32B32_SFLOAT del lado derecho del mapa de cubo. Ten en cuenta que se trata de HDR, por lo que los valores de punto flotante pueden ser mayores que 1.0.cubemapLeftImagees unfloat*que representa el búfer R32G32B32_SFLOAT del lado izquierdo del mapa de cubo. Ten en cuenta que se trata de HDR, por lo que los valores de punto flotante pueden ser mayores que 1.0.cubemapTopImagees unfloat*que representa el búfer R32G32B32_SFLOAT del lado superior del mapa de cubo. Ten en cuenta que se trata de HDR, por lo que los valores de punto flotante pueden ser mayores que 1.0.cubemapBottomImagees unfloat*que representa el búfer R32G32B32_SFLOAT del lado inferior del mapa de cubo. Ten en cuenta que se trata de HDR, por lo que los valores de punto flotante pueden ser mayores que 1.0.cubemapFrontImagees unfloat*que representa el búfer R32G32B32_SFLOAT del lado frontal del mapa de cubo. Ten en cuenta que se trata de HDR, por lo que los valores de punto flotante pueden ser mayores que 1.0.resolutiones unuint32_tque representa el ancho y la altura de la imagen de cada lado del mapa de cubo.rotationes un XrQuaternionf que representa la rotación del mapa de cubo.centerExposureTimees un objetoXrTimeque representa la hora en la que se capturó el mapa de cubos. Es útil para la interpolación entre mapas de cubo.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimationdebe habilitarse antes de usar XrEnvironmentLightingCubemapANDROID. typedebe serXR_TYPE_ENVIRONMENT_LIGHTING_CUBEMAP_ANDROIDnextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructurasstatedebe ser un valor de XrLightEstimateStateANDROID válidocubemapRightImagedebe ser un puntero a un valor de número de punto flotante válido.cubemapLeftImagedebe ser un puntero a un valor de número de punto flotante válido.cubemapTopImagedebe ser un puntero a un valor de número de punto flotante válido.cubemapBottomImagedebe ser un puntero a un valor de número de punto flotante válido.cubemapFrontImagedebe ser un puntero a un valor de número de punto flotante válido.cubemapBackImagedebe ser un puntero a un valor de número de punto flotante válido.
La estructura XrAmbientLightANDROID contiene datos de estimación de la luz ambiente en la escena.
typedef struct XrAmbientLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f colorCorrection;
} XrAmbientLightANDROID;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. Las estructuras válidas son XrSphericalHarmonicsANDROID, XrEnvironmentLightingCubemapANDROID y XrDirectionalLightANDROID.statees el XrLightEstimateStateANDROID que representa el estado de la estimación de luz.intensityes unXrVector3que representa la intensidad de la luz ambiental. Cada componente del vector corresponde a los canales rojo, verde y azul.colorCorrectiones unXrVector3con valores en el espacio gamma. Multiplica componente por componente el color de la renderización corregida por gamma con estos valores.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimationdebe habilitarse antes de usar XrAmbientLightANDROID. typedebe serXR_TYPE_AMBIENT_LIGHT_ANDROIDnextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructurasstatedebe ser un valor de XrLightEstimateStateANDROID válido
La estructura XrSphericalHarmonicsANDROID contiene armónicos esféricos que representan la iluminación de la escena.
typedef struct XrSphericalHarmonicsANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrSphericalHarmonicsKindANDROID kind;
float coefficients[9][3];
} XrSphericalHarmonicsANDROID;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. Las estructuras válidas son XrAmbientLightANDROID, XrEnvironmentLightingCubemapANDROID y XrDirectionalLightANDROID.statees el XrLightEstimateStateANDROID que representa el estado de la estimación de luz.kindes el XrSphericalHarmonicsKindANDROID que solicitó la aplicación.coefficientses un arrayfloatbidimensional con dimensiones de 9 filas y 3 columnas. Las 3 columnas correspondientes a los canales de color rojo, verde y azul, respectivamente. Cada canal tiene 9 coeficientes armónicos esféricos.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimationdebe habilitarse antes de usar XrSphericalHarmonicsANDROID. typedebe serXR_TYPE_SPHERICAL_HARMONICS_ANDROIDnextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructurasstatedebe ser un valor de XrLightEstimateStateANDROID válidokinddebe ser un valor XrSphericalHarmonicsKindANDROID válido.
La estructura XrDirectionalLightANDROID contiene datos de estimación de la luz.
typedef struct XrDirectionalLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f direction;
} XrDirectionalLightANDROID;
Descripciones de los miembros
typees el XrStructureType de esta estructura.nextesNULLo un puntero a la siguiente estructura en una cadena de estructuras. Las estructuras válidas son XrAmbientLightANDROID, XrSphericalHarmonicsANDROID y XrDirectionalLightANDROID.statees el XrLightEstimateStateANDROID que representa el estado de la estimación de luz.intensityes unXrVector3que representa la intensidad de la luz direccional. Cada componente del vector corresponde a los canales rojo, verde y azul.directiones unXrVector3que representa la dirección de la luz.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimationdebe habilitarse antes de usar XrDirectionalLightANDROID. typedebe serXR_TYPE_DIRECTIONAL_LIGHT_ANDROIDnextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructurasstatedebe ser un valor de XrLightEstimateStateANDROID válido
La enumeración XrSphericalHarmonicsKindANDROID identifica para el tiempo de ejecución qué tipo de armónicos esféricos solicita la aplicación.
typedef enum XrSphericalHarmonicsKindANDROID {
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID = 0,
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID = 1
} XrSphericalHarmonicsKindANDROID;
Los enums tienen los siguientes significados:
Enum |
Descripción |
|
Los coeficientes armónicos esféricos representan la función de radiancia de la luz del entorno, incluida la contribución de la luz principal. |
|
Los coeficientes armónicos esféricos representan la función de radiancia de la luz ambiental, sin incluir la contribución de la luz principal. |
La enumeración XrLightEstimateStateANDROID identifica para el tiempo de ejecución qué tipo de armónicos esféricos solicita la aplicación.
typedef enum XrLightEstimateStateANDROID {
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID = 0,
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID = 1
} XrLightEstimateStateANDROID;
Los enums tienen los siguientes significados:
Enum |
Descripción |
|
La estimación de luz es válida |
|
La estimación de luz no es válida |
Ejemplo de código para la estimación de la luz
En el siguiente ejemplo de código, se muestra cómo obtener todas las cantidades posibles de estimación de luz del tiempo de ejecución.
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));
Nuevos tipos de objetos
XrLightEstimator
La enumeración XrObjectType se extiende con lo siguiente:
XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID
Se extiende la enumeración XrStructureType con lo siguiente:
XR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROIDXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROIDXR_TYPE_LIGHT_ESTIMATE_ANDROIDXR_TYPE_DIRECTIONAL_LIGHT_ANDROIDXR_TYPE_SPHERICAL_HARMONICS_ANDROIDXR_TYPE_AMBIENT_LIGHT_ANDROIDXR_TYPE_ENVIRONMENT_LIGHTING_CUBEMAP_ANDROID
Nuevas enumeraciones
Nuevas estructuras
- XrLightEstimatorCreateInfoANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimateANDROID
- XrDirectionalLightANDROID
- XrSphericalHarmonicsANDROID
- XrAmbientLightANDROID
- XrSystemLightEstimationPropertiesANDROID
- XrEnvironmentLightingCubemapANDROID
Nuevas funciones
Problemas
Historial de versiones
- Revisión 2, 2025-01-17 (Salar Khan)
- Se agregó compatibilidad con el mapa de cubos de iluminación ambiental
- Revisión 1, 2024-09-16 (Cairn Overturf)
- Descripción inicial de la extensión
OpenXR™ y el logotipo de OpenXR son marcas comerciales propiedad de The Khronos Group Inc. y están registradas como marcas comerciales en China, la Unión Europea, Japón y el Reino Unido.