XR_ANDROID_light_estimation
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
Estado de ratificación
No se ratificó
Dependencias de extensiones y versiones
Fecha de la última modificación
2025-03-13
Estado de la IP
No hay reclamos conocidos por IP.
Colaboradores
Jared Finder, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Nihav Jain, Google
Salar Khan, Google
Scott Chung, 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. La aplicación puede usar esta información para iluminar objetos virtuales en las mismas condiciones que la escena del mundo real en la que se colocan.
Permisos
Las aplicaciones para Android deben tener el permiso android.permission.SCENE_UNDERSTANDING_COARSE incluido en su manifiesto, ya que esta extensión expone información de iluminación sobre el entorno. El permiso android.permission.SCENE_UNDERSTANDING_COARSE se considera un permiso peligroso. La aplicación debe solicitar el permiso durante el tiempo de ejecución para usar estas funciones:
(nivel de protección: peligroso)
Inspecciona la capacidad del sistema
La estructura XrSystemLightEstimationPropertiesANDROID se define de la siguiente manera:
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 llama a xrGetSystemProperties .
Si y solo si un tiempo de ejecución devuelve XR_FALSE para supportsLightEstimation , el tiempo de ejecución debe devolver XR_ERROR_FEATURE_UNSUPPORTED desde xrCreateLightEstimatorANDROID .
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimationdebe habilitarse antes de usar XrSystemLightEstimationPropertiesANDROID -
typedebe serXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras
Crea un controlador del estimador de luz
XR_DEFINE_HANDLE(XrLightEstimatorANDROID)
El tiempo de ejecución genera los datos de estimación de luz y los comparte con la aplicación a través del controlador XrLightEstimatorANDROID.
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 los 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 usa la función xrCreateLightEstimatorANDROID para crear un estimador de luz.
- El tiempo de ejecución debe devolver
XR_ERROR_FEATURE_UNSUPPORTEDsi el sistema no admite la estimación de luz. - El tiempo de ejecución debe devolver
XR_ERROR_PERMISSION_INSUFFICIENTsi no se otorgaron los permisos necesarios a la app de llamada.
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 a través de 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álido -
createInfodebe ser un puntero a una estructura XrLightEstimatorCreateInfoANDROID -
outHandledebe ser un puntero a un identificador de XrLightEstimatorANDROID.
Códigos de retorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOST
La estructura XrLightEstimatorCreateInfoANDROID describe la información para crear un identificador XrLightEstimatorANDROID.
typedef struct XrLightEstimatorCreateInfoANDROID {
XrStructureType type;
const 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_ANDROID -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras . Consulta también: XrCubemapLightEstimatorCreateInfoANDROID , XrPointLightsEstimatorCreateInfoANDROIDX1
La función xrDestroyLightEstimatorANDROID se define de la siguiente manera:
XrResult xrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator);
Descripciones de los parámetros
estimatores un XrLightEstimatorANDROID creado previamente por xrCreateLightEstimatorANDROID .
La función xrDestroyLightEstimatorANDROID libera el estimator y cualquier recurso subyacente.
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 los parámetros
estimatores un identificador para un XrLightEstimatorANDROID creado anteriormente con xrCreateLightEstimatorANDROID .inputes un puntero a una estructura XrLightEstimateGetInfoANDROID.outputes un 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_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
La estructura XrLightEstimateGetInfoANDROID se define de la siguiente manera:
typedef struct XrLightEstimateGetInfoANDROID {
XrStructureType type;
const 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 las armónicas esféricas devueltas.timees elXrTimeque describe el momento en el 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_ANDROID -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras -
spacedebe 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 incluyen XrAmbientLightANDROID , XrSphericalHarmonicsANDROID y XrDirectionalLightANDROID .statees el XrLightEstimateStateANDROID que representa el estado de la estimación de luz.lastUpdatedTimees elXrTimeque representa cuándo se calculó la estimación por última vez.
Para cada estructura de estimación de luz, si state es XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID, todos los demás campos de la estructura son arbitrarios, lo que significa que sus valores no están definidos.
Para obtener información sobre la estimación de luz para la luz ambiental, los armónicos esféricos y la luz direccional principal, las aplicaciones pueden encadenar instancias de las siguientes estructuras, XrAmbientLightANDROID, XrSphericalHarmonicsANDROID y XrDirectionalLightANDROID, respectivamente, a XrLightEstimateANDROID :: next .
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimationdebe habilitarse antes de usar XrLightEstimateANDROID -
typedebe serXR_TYPE_LIGHT_ESTIMATE_ANDROID -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras . Consulta también: XrAmbientLightANDROID , XrCubemapLightingDataANDROID , XrDirectionalLightANDROID , XrPointLightsANDROIDX1 , XrSphericalHarmonicsANDROID -
statedebe ser un valor XrLightEstimateStateANDROID válido.
La estructura XrAmbientLightANDROID contiene datos de estimación de la luz sobre 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 incluyen XrSphericalHarmonicsANDROID y XrDirectionalLightANDROID .statees el XrLightEstimateStateANDROID que representa el estado de la estimación de luz.intensityes un XrVector3f que representa la intensidad de la luz ambiente. Cada componente del vector corresponde a los canales rojo, verde y azul, respectivamente.colorCorrectiones un XrVector3f con valores en el espacio gamma. Si se renderiza en el espacio de color gamma, multiplícalos componente por componente con el color final calculado después del renderizado. Si se renderiza en espacio lineal, primero convierte los valores al espacio lineal elevándolos a la potencia 2.2 y, luego, multiplica componente por componente con el color final calculado después del renderizado.The purpose of pname:colorCorrection is to make a scene appear natural and blend with the real world.
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimationdebe habilitarse antes de usar XrAmbientLightANDROID -
typedebe serXR_TYPE_AMBIENT_LIGHT_ANDROID -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras -
statedebe ser un valor 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 incluyen XrAmbientLightANDROID 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.
Los coefficients se deben usar en una función especial que toma una dirección como entrada y genera el color de la luz que proviene de esa dirección. En este informe, se incluyen más detalles .
Uso válido (implícito)
- La extensión
XR_ANDROID_light_estimationdebe habilitarse antes de usar XrSphericalHarmonicsANDROID. -
typedebe serXR_TYPE_SPHERICAL_HARMONICS_ANDROID -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras -
statedebe ser un valor XrLightEstimateStateANDROID válido. -
kinddebe ser un valor XrSphericalHarmonicsKindANDROID 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,
XR_SPHERICAL_HARMONICS_KIND_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSphericalHarmonicsKindANDROID;
Los valores de enumeración tienen los siguientes significados:
Descripción de la enumeración
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID
Los coeficientes armónicos esféricos representan la función de radiancia de la luz del entorno, sin incluir la contribución de la luz principal.
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID
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.
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 incluyen XrAmbientLightANDROID , XrSphericalHarmonicsANDROID y XrDirectionalLightANDROID .statees el XrLightEstimateStateANDROID que representa el estado de la estimación de luz.intensityes un XrVector3f que representa la intensidad de la luz direccional. Cada componente del vector corresponde a los canales rojo, verde y azul.directiones un XrVector3f que 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_ANDROID -
nextdebe serNULLo un puntero válido a la siguiente estructura en una cadena de estructuras -
statedebe ser un valor XrLightEstimateStateANDROID válido.
La enumeración XrLightEstimateStateANDROID indica el estado de la estimación de luz que devuelve el tiempo de ejecución.
typedef enum XrLightEstimateStateANDROID {
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID = 0,
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID = 1,
XR_LIGHT_ESTIMATE_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrLightEstimateStateANDROID;
Los valores de enumeración tienen los siguientes significados:
Descripción de la enumeración
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID
La estimación de luz es válida.
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID
La estimación de luz no es válida
Ejemplo de código para la estimación de 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.
PFN_xrCreateLightEstimatorANDROID xrCreateLightEstimatorANDROID; // Created previously.
PFN_xrDestroyLightEstimatorANDROID xrDestroyLightEstimatorANDROID; // Created previously.
PFN_xrGetLightEstimateANDROID xrGetLightEstimateANDROID; // 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 sphericalHarmonics = {
.type = XR_TYPE_SPHERICAL_HARMONICS_ANDROID,
.next = &directionalLight,
};
// Querying both TOTAL or AMBIENT spherical harmonics in one call will result in an error because chaining two structs with the same type is not allowed
bool useTotalSH;
if (useTotalSH) {
sphericalHarmonics.kind = XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID;
} else {
sphericalHarmonics.kind = XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID;
}
XrAmbientLightANDROID ambientLight = {
.type = XR_TYPE_AMBIENT_LIGHT_ANDROID,
.next = &sphericalHarmonics,
};
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));
Nuevos tipos de objetos
Comandos nuevos
Nuevas estructuras
- XrLightEstimateANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimatorCreateInfoANDROID
Extensión de XrLightEstimateANDROID :
Extensión de XrSystemProperties :
Nuevas enumeraciones
Nuevas constantes de enumeración
XR_ANDROID_LIGHT_ESTIMATION_EXTENSION_NAMEXR_ANDROID_light_estimation_SPEC_VERSIONExtensión de XrObjectType :
XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID
Extensión de XrStructureType :
XR_TYPE_AMBIENT_LIGHT_ANDROIDXR_TYPE_DIRECTIONAL_LIGHT_ANDROIDXR_TYPE_LIGHT_ESTIMATE_ANDROIDXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROIDXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROIDXR_TYPE_SPHERICAL_HARMONICS_ANDROIDXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROID
Problemas
Historial de versiones
Revisión 1, 2024-09-16 (Cairn Overturf)
- Descripción inicial de la extensión