String de nome
XR_ANDROID_light_estimation
Tipo de extensão
Extensão da instância
Número de ramal registrado
701
Revisão
1
Dependências de extensão e versão
Data da última modificação
2025-01-17
Status do IP
Não há reivindicações de IP conhecidas.
Colaboradores
Jared Finder, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Nihav Jain, Google
Salar Khan, Google
Scott Chung, Google
Visão geral
Essa extensão permite que o aplicativo solicite dados que representam a iluminação do ambiente real ao redor do headset. Essas informações podem ser usadas ao renderizar objetos virtuais para iluminá-los nas mesmas condições da cena em que são colocados.
Inspecionar a capacidade do sistema
Um aplicativo pode inspecionar se o sistema oferece suporte à estimativa de iluminação encadeando uma estrutura XrSystemLightEstimationPropertiesANDROID à XrSystemProperties ao chamar xrGetSystemProperties.
typedef struct XrSystemLightEstimationPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsLightEstimation;
} XrSystemLightEstimationPropertiesANDROID;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no OpenXR principal ou nesta extensão.supportsLightEstimationé umXrBool32que indica se o sistema atual é compatível com a estimativa de iluminação.
Um aplicativo pode inspecionar se o sistema é capaz de oferecer suporte à estimação de luz estendendo o XrSystemProperties com a estrutura XrSystemLightEstimationPropertiesANDROID ao chamar xrGetSystemProperties.
Se o sistema não for capaz de oferecer suporte à estimativa de iluminação, ele vai retornar
XR_FALSE para supportsLightEstimation e XR_ERROR_FEATURE_UNSUPPORTED
de xrCreateLightEstimatorANDROID.
Uso válido (implícito)
- A extensão XR_ANDROID_light_estimation precisa ser ativada antes de usar XrSystemLightEstimationPropertiesANDROID.
typeprecisa serXR_TYPE_SYSTEM_LIGHT_ESTIMATION_PROPERTIES_ANDROIDnextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
Criar um handle do estimador de luz
XR_DEFINE_HANDLE(XrLightEstimatorANDROID)
O identificador XrLightEstimatorANDROID representa um estimador de luz. Esse identificador pode ser usado para acessar informações de estimativa de luz usando outras funções nesta extensão.
A função xrCreateLightEstimatorANDROID é definida como:
XrResult xrCreateLightEstimatorANDROID(
XrSession session,
XrLightEstimatorCreateInfoANDROID* createInfo,
XrLightEstimatorANDROID* outHandle);
Descrições dos parâmetros
sessioné o XrSession que cria o estimador de luz.createInfoé um ponteiro para uma estrutura XrLightEstimatorCreateInfoANDROID que contém parâmetros a serem usados para criar o estimador de luz.outHandleé um ponteiro para um identificador em que o XrLightEstimatorANDROID criado é retornado.
O aplicativo pode usar a função xrCreateLightEstimatorANDROID para criar um estimador de luz.
- xrCreateLightEstimatorANDROID vai retornar
XR_ERROR_FEATURE_UNSUPPORTEDse o sistema não for compatível com a estimativa de iluminação. - xrCreateLightEstimatorANDROID vai retornar
XR_ERROR_PERMISSION_INSUFFICIENTse as permissões necessárias não tiverem sido concedidas ao aplicativo de chamada.
O identificador do estimador de luz retornado pode ser usado posteriormente em chamadas de API. Se um aplicativo quiser indicar ao tempo de execução que terminou de acessar dados de estimativa de iluminação, ele precisa destruir o identificador usando xrDestroyLightEstimatorANDROID.
Uso válido (implícito)
- A extensão
XR_ANDROID_light_estimationprecisa ser ativada antes de chamar xrCreateLightEstimatorANDROID. sessionprecisa ser um identificador XrSession válidocreateInfomust ser um ponteiro para uma estrutura XrLightEstimatorCreateInfoANDROIDoutHandleprecisa ser um ponteiro para um identificador 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
A estrutura XrLightEstimatorCreateInfoANDROID descreve as informações para criar um identificador XrLightEstimatorANDROID.
typedef struct XrLightEstimatorCreateInfoANDROID {
XrStructureType type;
void* next;
} XrLightEstimatorCreateInfoANDROID;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no OpenXR principal ou nesta extensão.
Uso válido (implícito)
- A extensão
XR_ANDROID_light_estimationprecisa ser ativada antes de usar XrLightEstimatorCreateInfoANDROID. typeprecisa serXR_TYPE_LIGHT_ESTIMATOR_CREATE_INFO_ANDROIDnextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
A função xrDestroyLightEstimatorANDROID libera o estimator e todos os recursos
subjacentes.
XrResult xrDestroyLightEstimatorANDROID(
XrLightEstimatorANDROID estimator);
Descrições dos parâmetros
estimatoré um XrLightEstimatorANDROID criado anteriormente por xrCreateLightEstimatorANDROID.
Uso válido (implícito)
- A extensão
XR_ANDROID_light_estimationprecisa ser ativada antes de chamar xrDestroyLightEstimatorANDROID. estimatorprecisa ser um identificador XrLightEstimatorANDROID válido
Concorrência segura
- O acesso a
estimatore a qualquer identificador filho precisa ser sincronizado externamente.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Acessar dados de estimativa de iluminação
A função xrGetLightEstimateANDROID é definida como:
XrResult xrGetLightEstimateANDROID(
XrLightEstimatorANDROID estimator,
const XrLightEstimateGetInfoANDROID* input,
XrLightEstimateANDROID* output);
Descrições dos parâmetros
estimator: manipulador de um XrLightEstimatorANDROID criado anteriormente comxrCreateLightEstimatorANDROID.input: ponteiro para uma estrutura XrLightEstimateGetInfoANDROID.output: ponteiro para uma estrutura XrLightEstimateANDROID.
Uso válido (implícito)
- A extensão
XR_ANDROID_light_estimationprecisa ser ativada antes de chamar xrGetLightEstimateANDROID. estimatorprecisa ser um identificador XrLightEstimatorANDROID válidoinputprecisa ser um ponteiro para uma estrutura XrLightEstimateGetInfoANDROID válida.outputprecisa ser um ponteiro para uma estrutura 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
Um XrLightEstimateGetInfoANDROID descreve as informações necessárias para receber dados de estimativa de iluminação.
typedef struct XrLightEstimateGetInfoANDROID {
XrStructureType type;
void* next;
XrSpace space;
XrTime time;
} XrLightEstimateGetInfoANDROID;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.spaceé o XrSpace que define o espaço de referência em que a direção da luz retornada e as rotações de harmônicos esféricos e cubemap são expressas.timeé oXrTimeque descreve o momento em que o aplicativo quer consultar a estimativa de iluminação.
Uso válido (implícito)
- A extensão
XR_ANDROID_light_estimationprecisa ser ativada antes de usar XrLightEstimateGetInfoANDROID. typeprecisa serXR_TYPE_LIGHT_ESTIMATE_GET_INFO_ANDROIDnextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturasspaceprecisa ser um identificador XrSpace válido
A estrutura XrLightEstimateANDROID contém dados de estimativa de luz.
typedef struct XrLightEstimateANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrTime lastUpdatedTime;
} XrLightEstimateANDROID;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. As estruturas válidas são XrAmbientLightANDROID, XrSphericalHarmonicsANDROID, XrEnvironmentLightingCubemapANDROID e XrDirectionalLightANDROID.stateé o XrLightEstimateStateANDROID que representa o estado da estimativa de luz.lastUpdatedTimeé oXrTimeque representa quando a estimativa foi calculada pela última vez.
Para receber informações de estimativa de luz para o cubemap de iluminação do ambiente, luz ambiente, harmônicos esféricos e a luz direcional primária, os aplicativos podem encadear instâncias das seguintes estruturas, XrEnvironmentLightingCubemapANDROID, XrAmbientLightANDROID, XrSphericalHarmonicsANDROID e XrDirectionalLightANDROID, respectivamente, em XrLightEstimateANDROID::next.
Uso válido (implícito)
- A extensão
XR_ANDROID_light_estimationprecisa ser ativada antes de usar XrLightEstimateANDROID. typeprecisa serXR_TYPE_LIGHT_ESTIMATE_ANDROIDnextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas. Consulte também: XrAmbientLightANDROID, XrDirectionalLightANDROID, XrEnvironmentLightingCubemapANDROID, XrSphericalHarmonicsANDROIDstateprecisa ser um valor XrLightEstimateStateANDROID válido
A estrutura XrEnvironmentLightingCubemapANDROID contém dados de estimativa de luz em um formato de cubo de mapa sobre a iluminação do ambiente da cena.
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;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. As estruturas válidas são XrSphericalHarmonicsANDROID, XrAmbientLightANDROID e XrDirectionalLightANDROID.stateé o XrLightEstimateStateANDROID que representa o estado da estimativa de luz.cubemapRightImageé umfloat*que representa o buffer R32G32B32_SFLOAT do lado direito do cubemap. Como é HDR, os valores de ponto flutuante podem ser maiores que 1,0.cubemapLeftImageé umfloat*que representa o buffer R32G32B32_SFLOAT do lado esquerdo do cubemap. Como é HDR, os valores de ponto flutuante podem ser maiores que 1,0.cubemapTopImageé umfloat*que representa o buffer R32G32B32_SFLOAT da parte superior do cubemap. Como é HDR, os valores de ponto flutuante podem ser maiores que 1,0.cubemapBottomImageé umfloat*que representa o buffer R32G32B32_SFLOAT da parte de baixo do cubemap. Como é HDR, os valores de ponto flutuante podem ser maiores que 1,0.cubemapFrontImageé umfloat*que representa o buffer R32G32B32_SFLOAT da parte da frente do cubemap. Como é HDR, os valores de ponto flutuante podem ser maiores que 1,0.resolutioné umuint32_tque representa a largura e a altura da imagem de cada lado do cubo.rotationé um XrQuaternionf que representa a rotação do cubemap.centerExposureTimeé umXrTimeque representa o momento em que o cubo foi capturado. Útil para interpolação entre cubemaps.
Uso válido (implícito)
- A extensão
XR_ANDROID_light_estimationprecisa ser ativada antes de usar XrEnvironmentLightingCubemapANDROID. typeprecisa serXR_TYPE_ENVIRONMENT_LIGHTING_CUBEMAP_ANDROIDnextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturasstateprecisa ser um valor XrLightEstimateStateANDROID válidocubemapRightImageprecisa ser um ponteiro para um valor de ponto flutuante válidocubemapLeftImageprecisa ser um ponteiro para um valor de ponto flutuante válidocubemapTopImageprecisa ser um ponteiro para um valor de ponto flutuante válidocubemapBottomImageprecisa ser um ponteiro para um valor de ponto flutuante válidocubemapFrontImageprecisa ser um ponteiro para um valor de ponto flutuante válidocubemapBackImageprecisa ser um ponteiro para um valor de ponto flutuante válido
A estrutura XrAmbientLightANDROID contém dados de estimativa de luz sobre a luz ambiente na cena.
typedef struct XrAmbientLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f colorCorrection;
} XrAmbientLightANDROID;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. As estruturas válidas são XrSphericalHarmonicsANDROID, XrEnvironmentLightingCubemapANDROID e XrDirectionalLightANDROID.stateé o XrLightEstimateStateANDROID que representa o estado da estimativa de luz.intensityé umXrVector3que representa a intensidade da luz ambiente. Cada componente do vetor corresponde aos canais vermelho, verde e azul.colorCorrectioné umXrVector3com valores no espaço gama. Multiplique por componentes a cor da sua renderização corrigida por gama com esses valores.
Uso válido (implícito)
- A extensão
XR_ANDROID_light_estimationprecisa ser ativada antes de usar XrAmbientLightANDROID. typeprecisa serXR_TYPE_AMBIENT_LIGHT_ANDROIDnextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturasstateprecisa ser um valor XrLightEstimateStateANDROID válido
A estrutura XrSphericalHarmonicsANDROID contém harmônicos esféricos que representam a iluminação da cena.
typedef struct XrSphericalHarmonicsANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrSphericalHarmonicsKindANDROID kind;
float coefficients[9][3];
} XrSphericalHarmonicsANDROID;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. As estruturas válidas são XrAmbientLightANDROID, XrEnvironmentLightingCubemapANDROID, e XrDirectionalLightANDROID.stateé o XrLightEstimateStateANDROID que representa o estado da estimativa de luz.kindé o XrSphericalHarmonicsKindANDROID solicitado pelo aplicativo.coefficientsé uma matrizfloatbidimensional com dimensões de 9 linhas e 3 colunas. As três colunas correspondentes aos canais de cores vermelho, verde e azul, respectivamente. Cada canal tem nove coeficientes harmônicos esféricos.
Uso válido (implícito)
- A extensão
XR_ANDROID_light_estimationprecisa ser ativada antes de usar XrSphericalHarmonicsANDROID. typeprecisa serXR_TYPE_SPHERICAL_HARMONICS_ANDROIDnextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturasstateprecisa ser um valor XrLightEstimateStateANDROID válidokindprecisa ser um valor XrSphericalHarmonicsKindANDROID válido.
A estrutura XrDirectionalLightANDROID contém dados de estimativa de luz.
typedef struct XrDirectionalLightANDROID {
XrStructureType type;
void* next;
XrLightEstimateStateANDROID state;
XrVector3f intensity;
XrVector3f direction;
} XrDirectionalLightANDROID;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. As estruturas válidas são XrAmbientLightANDROID, XrSphericalHarmonicsANDROID e XrDirectionalLightANDROID.stateé o XrLightEstimateStateANDROID que representa o estado da estimativa de luz.intensityé umXrVector3que representa a intensidade da luz direcional. Cada componente do vetor corresponde aos canais vermelho, verde e azul.directioné umXrVector3que representa a direção da luz.
Uso válido (implícito)
- A extensão
XR_ANDROID_light_estimationprecisa ser ativada antes de usar XrDirectionalLightANDROID. typeprecisa serXR_TYPE_DIRECTIONAL_LIGHT_ANDROIDnextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturasstateprecisa ser um valor XrLightEstimateStateANDROID válido
A enumeração XrSphericalHarmonicsKindANDROID identifica para o tempo de execução qual tipo de harmônicos esféricos o aplicativo está solicitando.
typedef enum XrSphericalHarmonicsKindANDROID {
XR_SPHERICAL_HARMONICS_KIND_TOTAL_ANDROID = 0,
XR_SPHERICAL_HARMONICS_KIND_AMBIENT_ANDROID = 1
} XrSphericalHarmonicsKindANDROID;
Os enums têm os seguintes significados:
Enum |
Descrição |
|
Os coeficientes harmônicos esféricos representam a função de radiância da luz do ambiente, incluindo a contribuição da luz principal. |
|
Os coeficientes harmônicos esféricos representam a função de radiância da luz ambiente, excluindo a contribuição da luz principal. |
A enumeração XrLightEstimateStateANDROID identifica para o tempo de execução qual tipo de harmônicos esféricos o aplicativo está solicitando.
typedef enum XrLightEstimateStateANDROID {
XR_LIGHT_ESTIMATE_STATE_VALID_ANDROID = 0,
XR_LIGHT_ESTIMATE_STATE_INVALID_ANDROID = 1
} XrLightEstimateStateANDROID;
Os enums têm os seguintes significados:
Enum |
Descrição |
|
A estimativa de iluminação é válida |
|
A estimativa de iluminação é inválida |
Exemplo de código para estimativa de iluminação
O exemplo de código a seguir demonstra como extrair todas as quantidades possíveis de estimativa de luz do tempo de execução.
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));
Novos tipos de objetos
XrLightEstimator
A enumeração XrObjectType é estendida com:
XR_OBJECT_TYPE_LIGHT_ESTIMATOR_ANDROID
A enumeração XrStructureType é estendida com:
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
Novos enums
Novas estruturas
- XrLightEstimatorCreateInfoANDROID
- XrLightEstimateGetInfoANDROID
- XrLightEstimateANDROID
- XrDirectionalLightANDROID
- XrSphericalHarmonicsANDROID
- XrAmbientLightANDROID
- XrSystemLightEstimationPropertiesANDROID
- XrEnvironmentLightingCubemapANDROID
Novas funções
Problemas
Histórico de versões
- Revisão 2, 17/01/2025 (Salar Khan)
- Adição de suporte a cubemap de iluminação ambiente
- Revisão 1, 16/09/2024 (Cairn Overturf)
- Descrição inicial da extensão
OpenXR™ e o logotipo OpenXR são marcas registradas de propriedade da Khronos Group Inc. e estão registradas como marcas comerciais na China, na União Europeia, no Japão e no Reino Unido.